gpt4 book ai didi

c++ - 指针数组没有像想象的那样给出正确的输出?

转载 作者:行者123 更新时间:2023-11-30 20:47:21 24 4
gpt4 key购买 nike

嗨,我有两个指针 int *p[2] 的数组,我正在尝试存储 3 个整数地址,让我们采用 &i、&j、&k ,如下代码在 *p[0]

我得到了垃圾,为什么这里是垃圾?它应该在 p[2] 处?在 *p[1] 我得到了值(value),这没关系,但是在 *p[2] 我在这里得到了值(value),我应该得到垃圾吗?

     #include<stdio.h> 
int main()
{
int i=10,j=20,k=30;

int *p[2]; // here p is array of 2 pointers
p[0]=&i; // but here i am storing
p[1]=&j; // 3 address of variable i,j,k
p[2]=&k;

printf("p[0]=%d\n",*p[0]); // why garbage here ?
printf("p[1]=%d\n",*p[1]); // here 20
printf("p[2]=%d\n",*p[2]); // here 30 why here ?
}

最佳答案

printf("p[2]=%d\n",*p[2]); // here 30 why here ?

因为 p 有两个元素,而不是三个。您可以访问元素 0 和 1,但访问 2 是未定义的行为。可以打印任何数字,否则当您调用未定义的行为时,您的程序可能会崩溃。

I am getting value here i should get garbage?

30 和其他数字一样都是垃圾值。

**编辑(响应问题的编辑)当您分配p[2] = &k 时,您写入的位置未分配给您的程序。但是,如果写入操作完成而没有崩溃,则新值将保留在内存中。

由于您写入k地址的内存不属于您的程序,系统可能会向其中写入一个新值。但是,它不会 100% 确定地执行此操作:它可能根本不会将新值写入该内存。这正是您的情况所发生的情况:写入 p[2]&k 值在两次调用 printf 后非法“存活” code>,生成 30 作为结果。

关于c++ - 指针数组没有像想象的那样给出正确的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293936/

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