c语言之sizeof的细节

关于sizeof,我们知道sizeof并不是一个函数,尽管通常我们会用sizeof()用法(这是c语言的坑),在此关于sizeof的一些关键不被认知的进行一下总结:

 1 # include "iostream"
 2 int array[]{23, 34, 12, 17, 204, 99, 16};
 3 #define TOTAL_ele (sizeof(array)/sizeof(array[0]))
 4 int main()
 5 {
 6     using namespace std;
 7     int d = -1;
 8     cout << " the return value of array is:" << sizeof(array) << endl;
 9     cout << "the return value of array[0] is:" << sizeof(array[0]) << endl;
10     if (d < TOTAL_ele - 2)
11         cout << "无fuck说" << endl;
12     system("pause");
13     return 0;
14 
15 }

上面一段c++代码,注意几点:

sizeof(数组名),返回的是:元素个数×类型字节数(比如这里是28),尽管我们知道数组名表示一个地址。

sizeof()的返回值,准确的说叫做测量值,是个无符号数,即unsigned 类型,因此上述 if(d<TOTAL_ele-2)并不为逻辑真,因为左右类型不匹配,实际上,会将左侧的int型的d= -1转化成一个4个字节的无符号数-1。

因此在此强调一个概念:C语言写程序的时候一定要注意类型的匹配

猜你喜欢

转载自www.cnblogs.com/shaonianpi/p/9710735.html