最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

浅谈: sizeof()与指针

来源:博客园


(资料图片仅供参考)

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

cout << sizeof(char) << endl; // 1    cout << sizeof(short) << endl;// 2    cout << sizeof(int) << endl;// 4    cout << sizeof(long) << endl;// 4ps: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()作用于指针等价于取址符&,作用于解引用相当于计算指针指向元素的内存大小。

关键词: 地址总线 基本一致