【发布时间】:2021-12-10 03:21:25
【问题描述】:
所以我正在做指针算术作业,我需要按照预期的outcome 递减和递增指针。这就是我所做的
#include <stdio.h>
void main(void){
int d = 10;
int c = 8;
int b = 6;
int a = 4;
int *ptr; //these lines are given
printf("decrement \n");
for (ptr = &d; ptr >= &a; ptr--)
{
printf("%d \n",*ptr);
}
printf("increment \n");
for (ptr = &a; ptr <= &d; ptr++)
{
printf("%d \n",*ptr);
}
}
但是结果跳过了8和6:
decrement
10
4
increment
4
10
所以我决定把开头的地址打印出来帮助调试
printf("%p\n",(void*)&d);
printf("%p\n",(void*)&c);
printf("%p\n",(void*)&a);
printf("%p\n",(void*)&b);
但是运行之后,它就可以工作了
000000fc6a9ffb34
000000fc6a9ffb30
000000fc6a9ffb28
000000fc6a9ffb2c
decrement
10
8
6
4
increment
4
6
8
10
所以我知道逻辑是可行的,但是如果不先打印就行不通,我不知道为什么
我正在使用 Vscode 和 GCC
【问题讨论】:
-
当事物的地址未被引用时,它们可能没有地址。通常,也不能保证函数的堆栈框架中的事物是如何排序的。
-
你不能把局部变量当作一个数组,这不是事情的运作方式。它将导致未定义的行为并使您的程序格式错误。无论你从哪里学到这一点,都应该把它扔掉。
-
另外,请不要发布文字图片。复制粘贴文本作为文本。也请花一些时间阅读the help pages,阅读SO tour,阅读How to Ask,以及this question checklist。
-
这是我大学计算机科学课程的一部分,目前我正在询问是否允许将变量转换为数组。此外,我很确定如果我使用的是我学校推荐的 TurboC,这会起作用,尽管我确实可以使用 vscode