结构的大小和结构的指针?

时间:2014-03-03 09:08:57

标签: c sizeof

我有以下代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

int main(int argc, char **argv)
{
    uint32 *data;

    printf("%lu\n", sizeof(uint32_t));
    printf("%lu\n", sizeof(uint32_t*));
    printf("%lu\n", sizeof(*data));

}

**OUTPUT**:
4  // <-This is size uint32_t structure 
8  // <-Here I understand it is size of pointer which is equal to 8 
4  // <-What does it mean?

sizeof(*data)是否是malloc(sizeof(*data))中分配内存的正确方法? 我在库源代码中看到了这种内存分配,我无法理解是否有人可以解释我会很高兴。并随意纠正问题的标题。因为我不知道它是什么意思。如果在评论中指出这个问题之前已经提出了相同的问题,我将只是提出问题。提前谢谢。

3 个答案:

答案 0 :(得分:4)

这对我来说似乎很合乎逻辑:你问的是*data的大小:因为它是uint32_t上的一个指针,你取消引用会得到一个uint32_t,因此{ {1}}

4

uint32_t * data; // pointer on uint32_t uint32_t deref_data = *data; // uint32_t == sizeof(*data) == sizeof(*(uint32_t*))

关于sizeof(uint32_t)您可以:

malloc

答案 1 :(得分:2)

sizeof 是一元运算符。它以字节为单位返回(计算)它的参数大小。 sizeof的参数可以是类型或表达式。

您的示例中的两行提供了一个类型作为 sizeof 的参数,而第三行提供了表达式。

您提供的表达式取消引用指向uint32的指针。因为该表达式的最终类型是uint32类型,并且它在机器上的大小是4个字节,这就是你得到的。

答案 2 :(得分:0)

这意味着任何数据点都是4个字符(通常是字节)大。

sizeof是一个运算符,sizeof(thing)是多少个字符“东西”很大。

数据指向uint32,因此它是8个字符大(64位),它指向4个字符(32位)。所以sizeof( data)= sizeof((uint32 *))= sizeof(uint32)。