根据我对32位机器的理解,指针的大小是32位(4字节),而在64位机器上是8字节。不管它们指向什么数据类型,它们都有固定的大小。我的电脑是在64位上运行的,但是当我打印包含*的尺寸时,我得到4。为什么会这样呢?打印变量和打印*变量有什么区别。
int *name = NULL;
int *add = NULL;
cout<< sizeof (*name) << endl; // Prints 4
cout << sizeof (add); //Prints 8发布于 2019-12-18 11:00:09
*运算符取消对指针的引用。换句话说,它给了你它所指向的东西。
name的类型为int *,因此*name的类型为int。这意味着sizeof(*name)与sizeof(int)相同,在您的系统上是4。
同样,add的类型为int *。这意味着sizeof(add)与sizeof(int *)相同,在您的系统上是8。
发布于 2019-12-18 11:00:44
因为sizeof (*name)不同于sizeof (name)。前者是int,不是int *。在大多数架构上,int可能是4个字节。
发布于 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段说(强调我的):
...大小由操作数的类型决定。结果是一个整数。如果操作数的类型是可变长度数组类型,则计算操作数;否则,不计算操作数,结果为整数常量。
https://stackoverflow.com/questions/59384841
复制相似问题