当前位置: 代码迷 >> 综合 >> #C++小trick# std::cout << sizeof(int*) << std::endl;到底输出是4还是8?
  详细解决方案

#C++小trick# std::cout << sizeof(int*) << std::endl;到底输出是4还是8?

热度:101   发布时间:2023-12-04 08:14:47.0

今晚在看求数组元素个数这块内容,代码如下:

#include <iostream>int main(){
    int a[12];//定义数组aauto b = a;std::cout << sizeof(b) / sizeof(int) << std::endl;//打印数组b的元素个数std::cout << sizeof(int*) << std::endl;}

在这里插入图片描述
一个指针占4位,但我电脑是64位机(cmd命令窗口内输入systemInfo):
在这里插入图片描述
后查看vs code,把x86(VS工程配置为win32)改成x64即可将VS工程配置为win64,则可以得到占用8个字节的指针。
在这里插入图片描述在这里插入图片描述
此时代码输出:
在这里插入图片描述

总结:

一个地址是32位,任何指针都是一个地址,所以就是占用4byte(32位),在不同的硬件平台上,指针变量占用的内存大小与其地址值的范围大小成正比。

如果CPU是32位,内存是CPU能够直接访问的区域,CPU每次处理的数据也是32位,那CPU能够直接访问的内存大小就是2的32次方,也就是4GB。

如果CPU硬件是64位的,操作系统也是64位的,但是由于vs建立的工程用的是win32,对应于32位的编译器,则所用到的指针类型实际上还是4个字节,即为32位;如果将VS工程配置为win64,则可以得到占用8个字节的指针。