我有以下代码示例:
#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))
中分配内存的正确方法?
我在库源代码中看到了这种内存分配,我无法理解是否有人可以解释我会很高兴。并随意纠正问题的标题。因为我不知道它是什么意思。如果在评论中指出这个问题之前已经提出了相同的问题,我将只是提出问题。提前谢谢。
答案 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)。