[英]sizeof of structure and pointer to structure?
我有以下代码示例:
#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))
分配内存的正确方法? 我在库源代码中看到了这种内存分配,我无法理解是否有人可以解释我会很高兴。 并随意纠正问题的标题。 因为我不知道它是什么意思。 如果在评论中指出这个问题之前已经提出了相同的问题,我将只是提出问题。 先感谢您。
好吧,这对我来说似乎很合乎逻辑:你问的是*data
的大小:因为它是uint32_t
上的一个指针,你取消引用你得到一个uint32_t
,因此4
uint32_t * data; // pointer on uint32_t
uint32_t deref_data = *data; // uint32_t
sizeof(*data)
== sizeof(*(uint32_t*))
== sizeof(uint32_t)
关于malloc
你可以:
uint32_t * data = malloc(sizeof(uint32_t));
sizeof是一元运算符。 它以字节为单位返回(计算)它的参数大小。 sizeof的参数可以是类型或表达式。
您的示例中的第一行提供了一个类型作为sizeof的参数,而第三行提供了表达式。
您提供的表达式取消引用指向uint32的指针。 因为该表达式的最终类型是uint32类型,并且它在您的机器上的大小是4个字节,这就是你得到的。
这意味着无论数据指向的是4个字符(通常是字节)大。
sizeof是一个运算符,sizeof(thing)是多少个字符“东西”很大。
数据指向uint32,因此它是8个字符大(64位),它指向4个字符(32位)。 所以sizeof( data)= sizeof( (uint32 *))= sizeof(uint32)基本上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.