gpt4 book ai didi

c++ - c/c++ 中的指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:39 24 4
gpt4 key购买 nike

#include <stdio.h>

void main()
{
int p[]={0,1,2,3,4};
int *a[]={p,p+1,p+2,p+3,p+4};
printf("%u %u %u",a,*a,*(*a));
}

*(*a) 会打印什么(它会打印 0 还是它的地址)?如果我们将数组 p 设为静态(static int p[]),输出会发生变化。为什么?

最佳答案

首先,我认为你的意思是 3%u 而不是 4。其次,您不应该关心前 2 个输出:a 和 *a,因为它们是操作系统分配的地址。

现在回答你的问题,在第一种情况下,当你不使用static时,数据的代码空间分配在堆栈上,操作系统使用随机化技术,为了安全起见改变变量的地址.这就是为什么 a 和 *a 的输出不断变化的原因。但是,一旦您将 p 声明为静态,它就会分配到数据区域中,操作系统不会随机化,因此您会得到 *a 输出作为常量。但是,a still 是非静态的,因此每次运行程序时它的输出都会改变,因为它仍然分配在堆栈上。我希望这回答了你的问题。

如果你的意思是在第一种情况下 a 和 *a 非常接近而在第二种情况下它们不是,我的回答也回答了这一点。

关于c++ - c/c++ 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com