繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM