首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针的大小( *variable VS variable)

指针的大小( *variable VS variable)
EN

Stack Overflow用户
提问于 2019-12-18 10:56:04
回答 3查看 179关注 0票数 2

根据我对32位机器的理解,指针的大小是32位(4字节),而在64位机器上是8字节。不管它们指向什么数据类型,它们都有固定的大小。我的电脑是在64位上运行的,但是当我打印包含*的尺寸时,我得到4。为什么会这样呢?打印变量和打印*变量有什么区别。

代码语言:javascript
复制
   int *name = NULL;
    int *add = NULL;

    cout<< sizeof (*name) << endl; // Prints 4
    cout << sizeof (add); //Prints 8
EN

回答 3

Stack Overflow用户

发布于 2019-12-18 11:00:09

*运算符取消对指针的引用。换句话说,它给了你它所指向的东西。

name的类型为int *,因此*name的类型为int。这意味着sizeof(*name)sizeof(int)相同,在您的系统上是4。

同样,add的类型为int *。这意味着sizeof(add)sizeof(int *)相同,在您的系统上是8。

票数 5
EN

Stack Overflow用户

发布于 2019-12-18 11:00:44

因为sizeof (*name)不同于sizeof (name)。前者是int,不是int *。在大多数架构上,int可能是4个字节。

票数 0
EN

Stack Overflow用户

发布于 2019-12-18 16:56:49

这两个指令

sizeof (*name)sizeof (add)是完全不同的。

sizeof (add)的情况下,您需要一个指针的大小,64位(8字节),因为您可以正确分析。

sizeof (*name)的情况下,指令首先取消引用指针,然后对取消引用的指针应用sizeof函数(在int上)。因此,结果将是32位(4字节)。这是因为在64位体系结构中,int也可以是32位。

这是因为sizeof是一个编译时构造。如果我们看一下C99标准草案第6.5.3.4节,sizeof运算符第2段说(强调我的):

...大小由操作数的类型决定。结果是一个整数。如果操作数的类型是可变长度数组类型,则计算操作数;否则,不计算操作数,结果为整数常量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59384841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档