2015-10-17 44 views
0

的大小假设有一个结构fakes一个结构

struct fakes { 
.... 
}; 

而且还有一个指针:

struct fakes *fakes; 

我想知道是否sizeof(struct fakes)sizeof(*fakes)是相同的。

回答

3

我想知道sizeof(struct fakes)sizeof(*fakes)是否一样。

是的,他们保证是一样的。

+0

他们都是一样的确实,但它是相当混乱使用相同标识符的'struct'标签和实际的对象。 – chqrlie

+0

是的,使用相同的标识符可能会造成混淆。 – HuangJie

0

是的。这些都是一样的。

sizeof用于确定数据类型在内存中占用的空间量。编译器实际上只关心类型,而不关心它的特定实例(因为所有实例都应占用相同数量的空间)。所以sizeof(struct fakes)保证与sizeof(*fakes)相同。

+0

你能解释为什么以下不起作用吗? 'int a [10] = {1,2,34}; int * ptr = a; printf(“aray的大小是%d \ n”,sizeof(a)); 的printf( “PTR的大小为%d \ n” 个,的sizeof(* PTR));' 它给输出作为 '阿雷的大小为40 大小的ptr的是4' – Karthick

+0

@Karthick否,即工作。当你在数组上使用'sizeof'时,它会给你数组占用多少字节。因此,在10个“int”数组上的'sizeof',其中int是4个字节,产生'40'。单个元素'sizeof(* ptr)'或'sizeof(int)'的大小是'4'。 –

0

将sizeof运算符应用于类,结构体或联合体类型时,结果为该类型的对象中的字节数加上任何用于对齐单词边界上的成员的填充。结果不一定对应于通过添加个别成员的存储要求计算的大小。

将sizeof运算符应用于引用时,结果与将sizeof应用于该对象本身的结果相同。

检查了这一点,

https://msdn.microsoft.com/en-us/library/4s7x1k91.aspx

+0

既然这是C,那么“class”并不适用。另外,尽管微软对'sizeof'的实现可能符合标准,但链接页面只能保证适用于Visual C++,而不适用于其他实现。 –