笔试遇到很多sizeof的小题,博主基础堪忧,怒总结如下,还是要巩固基础啊啊啊!
sizeof操作符 对象所占内存空间的大小,单位是字节
关键词:char 数组 指针 结构体
sizeof(NULL) 结果为1
1.基本类型占内存大小
32位机 | 64位机器 | |||
类型 | 字节数 | |||
int | 4 | |||
char | 1 | |||
指针 | 4 | 8 | ||
float | 4 | 浮点型 | ||
long | 4 | |||
double | 8 | 双精度浮点型 |
2.sizeof(指针) 任意类型指针,结果为4
3.sizeof(数组) 元素大小*n
注意:数组名作为参数传递时,退化为指针,不传值不退化
如 int data[30] = {1,2,3,4};
sizeof(data); //30*4为120
int getSize(int data[ ] ){
return sizeof(data);} // 返回4
4.静态数组vs动态数组
静态数组见上文,动态数组是初始化一个指针
**********************************************************
笔试题
1.美图2014实习生笔试(2014.05.19),稍有改动
char a[30]="abcdef";
char *aa = new char[20];
int b[30] = {1,2,3,4,5};
int *bb = new int[30];cout << sizeof(a) << endl; //30 char数组30*1
cout << sizeof(aa) << endl; //4 char指针
cout << sizeof(b) << endl; //120 int数组30*4
cout << sizeof(bb) << ‘\n‘ <<endl;//4 int指针cout << sizeof(a[3]) << endl; //1 char类型
cout << sizeof(b[3]) << endl; //4 int类型
cout << sizeof(aa+3) << endl; //4 char指针
cout << sizeof(bb+3) <<‘\n‘ <<endl; //4 int指针cout << sizeof(*(aa+4)) << endl; //1 aa+4为指针,解引用为数组中元素,这里为空即NULL
cout << sizeof(*(bb+4)) << endl;
cout << getSize(b) <<endl; //4 数组名作为参数传递,退化为指针
2.搜狐笔试(2012.09.15) (未测试)
C/C++语言:请问在64位平台机器下,以下程序的输出结果()
char *string_a = (char*)malloc(100*sizeof(char));
char string_b[100];
printf("%d, %d",sizeof(string_a), sizeof(string_b));
A. 8, 100
B. 100, 8
C. 100, 100
D. 8, 8
答:A
string_a是一个指针,不管它指向的空间有多大,它本身的空间 是固定的。在64位平台机器下,一个指针的大小是8。
【C++基础】sizeof 数组 指针 空NULL