浅谈: sizeof()与指针

Posted yjy2023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈: 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()作用于指针等价于取址符&,作用于解引用相当于计算指针指向元素的内存大小。

以上是关于浅谈: sizeof()与指针的主要内容,如果未能解决你的问题,请参考以下文章

sizeof 数组名字,数组指针

C/C++浅谈C/C++中函数指针与回调函数

数组和指针关于「sizeof」 「strlen 」经典易错面试题

关于指针函数与指针数组的若干问题归纳

引用与指针的区别

sizeof 运算结果与编译系统有关