浅谈: sizeof()与指针

在c语言中sizeof()给出参数所占的内存大小,如在64位win系统中:

    cout << sizeof(char) << endl; 		// 1
    cout << sizeof(short) << endl;		// 2
    cout << sizeof(int) << endl;		// 4
    cout << sizeof(long) << endl;		// 4	ps:64位Linux下long占8字节
    cout << sizeof(long long) << endl; 	        // 8
    cout << sizeof(float) << endl;		// 4
    cout << sizeof(double) << endl;		// 8  

32位系统与64位基本一致,只有long不同:32位中long和unsigned long为4字节,64位中long和unsigned long为8字节(win系统为4字节)。

指针本身所占的内存大小仅取决于系统地址总线大小,而一般地址总线大小与机器字长一致。即:32位系统中指针占4字节,64位系统中指针占8字节。

    cout << sizeof(char*) << endl;		// 8
    cout << sizeof(int*) << endl;		// 8
    cout << sizeof(double*) << endl;	        // 8

此外,共用体union内存大小是其最大成员的字节大小,struct所占内存是其各成员字节大小之和。

    int a[][3] = {{0, 1, 2}, {3, 4, 5}};
    int* p = &a[0][0];			// 等价p指向1维数组
    int (*q)[3] = &a[0];		// 数组指针,等价q指向二维数组,元素是大小为3的int数组
    cout << sizeof(p) << endl;	        // 8
    cout << sizeof(&p) << endl;         // 8,此处是取地址,大小8字节
    cout << sizeof(*p) << endl;	        // 4
    cout << sizeof(q) << endl;	        // 8
    cout << sizeof(&q) << endl;	        // 8
    cout << sizeof(*q) << endl;	        // 12,*q是q指向的元素,是1个大小为3的int型数组

总结:sizeof()作用于指针等价于取址符&,作用于解引用相当于计算指针指向元素的内存大小。

posted @ 2023-02-27 20:31  羽落无痕  阅读(361)  评论(0)    收藏  举报