下面是一道笔试题:
|
|
在64位linux系统上此程序的输出为:
8 11 100 400 4 3 8 6 16 8 8
在32位机上的输出为:
4 11 100 400 4 3 4 6 8 4 4
解释:32位机器上long和int都是4字节,64位机器上,long是8字节,int是4字节
sizeof和strlen之间的区别
接上面的例子分析:
|
|
总结
- sizeof操作符的结果类型时size_t,它在头文件中的typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小
再来一题
|
|
输出:“20, 4, 4”。data1是一个数组,sizeof(data1)是求数组的大小。这个数组包含5个整数,每个整数占4字节,因此总共是20字节。data2声明为指针,尽管它指向了数组data1的第一个数字,但它的本质仍然是一个指针。在32位系统上,对任意指针求sizeof,得到的结果都是4。在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。因此尽管函数GetSize的参数data被声明为数组,但它会退化为指针,size3的结果仍然是4。—《剑指offer》P37