使用sizeof运算符可以求得某种类型,sizeof是关键字,sizeof()是运算符

  使用sizeof运算符可以求得某种类型,sizeof是关键字,sizeof()是运算符

  这段代码的运行结果是4,4,16,4。

  Q (1)为什么pArray_No1初始化为指向10个int类型的内存地址块(我的理解对吗?)

  sizeof的结果只有一个int字节,应该是10。为什么?

  q(2)Parray _ NO2=a;解释pArray_No2指向数组A的第一个元素的地址sizeof(pArray_No2)

  =4,我理解编译器只计算数组A第一个元素的地址的内存空间;但是问题出来了,a。

  表示的肯定是数组A的第一个元素的地址,但是这里sizeof(a)=16,这意味着编译器计算的不是

  由数组的四个元素而不是第一个元素的地址所占据的内存空间。我很困惑,pArray_No2和

  a代表同样的意思,但是为什么sizeof的结果完全不一样?

  MSDN的解释是:

  sizeof关键字给出与关联的存储量(以字节为单位)

  变量或类型(包括聚合类型)。

  该关键字返回size_t类型的值。

  它的返回值类型是size_t,在头文件stddef.h中定义,这是一个依赖于编译系统的值。一个

  一般定义为

  typedef无符号int size _ t;

  我认为理解sizeof运算符的关键是理解编译时和运行时的区别。静态数组的大小是在编译时确定的,所以sizeof获取数组的大小,而指针动态地打开内存。Sizeof无法获取其打开内存的大小,只能在编译器编译时获取指针的大小。不管win32平台上的指针大小是多少,都是4字节。您可以通过编译以下两段代码来进行比较和分析:

  (1)

  (2)

使用sizeof运算符可以求得某种类型,sizeof是关键字,sizeof()是运算符