浅谈: 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()与指针的主要内容,如果未能解决你的问题,请参考以下文章