首页 > 代码库 > 【C++基础】sizeof 数组 指针 空NULL

【C++基础】sizeof 数组 指针 空NULL

笔试遇到很多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。