【发布时间】:2017-07-28 07:07:35
【问题描述】:
假设我有以下结构:
typedef struct
{
int length ;
int * data ;
} Array ;
在我的主要功能中,我执行以下操作:
int length = 10;
char * filename = " data ";
// create an object
Array * arrptr1 = NULL ;
printf (" sizeof ( arrptr1 ) = % d \ n ", ( int ) sizeof ( arrptr1 ));
arrptr1 = malloc ( sizeof ( Array ));
printf (" sizeof ( arrptr1 ) = %d , sizeof ( Array ) = % d \ n" ,
( int ) sizeof ( arrptr1 ) , ( int ) sizeof ( Array ));
// allocate memory for the data
arrptr1 -> length = length ;
arrptr1 -> data = malloc ( sizeof ( int ) * ( arrptr1 -> length ));
printf (" sizeof ( arrptr1 ) = %d , sizeof ( arrptr1 -> data ) = % d \ n " ,
( int ) sizeof ( arrptr1 ) , ( int ) sizeof ( arrptr1 -> data ));
每个打印语句会打印什么?
我知道对于第一次打印,sizeof(arrptr1) 将只是一个垃圾值。
对于第二次打印,sizeof(arrptr1) = 8 和 sizeof(Array) = 8 也一样吗?
第三个打印语句会输出什么?
【问题讨论】:
-
指针的大小不会改变,但我想你是在问指针指向的内容的大小。
-
sizeof(some_pointer_variable_or_type)返回 指针 的大小,而不是它所指向的大小。 -
指针包含结构第一个字节的地址。为什么指针大小会增加?
标签: c structure dynamic-memory-allocation