【发布时间】:2012-12-05 22:14:38
【问题描述】:
您好,我对以下问题的解释感到困惑,谁能给我解释一下?提前致谢。
#include<stdio.h>
int main(){
char *arr,c;
arr = &c;
arr++;
*arr = 'a';
arr++;
*arr = 'b';
arr++;
*arr = 'c';
arr--;
arr--;
printf("\narr 1 = %c",arr);
printf("\narr 2 = %c",arr[1]);
printf("\narr 3 = %c",arr[2]);
getch();
return 1;
}
输出是:
arr 1 = 一个
arr 2 = b
arr 3 = c
但如果换行:
printf("\narr 1 = %c",arr);
与
printf("\narr 1 = %c",arr[0]);
现在输出是:
arr 1 =
arr 2 = b
arr 3 = c
为什么 'a' 没有被打印出来。?
*对于那些质疑程序编码不好的人。我知道使用这样的指针不是一个好的编码习惯,但我的问题是为什么 arr[0] 没有打印任何作为 arr[1] 的东西& arr[2] 正在打印分配的内容?
【问题讨论】:
-
你有一个更严重的问题,即你只有一个
char,但你试图修改3个不同的chars。 -
未定义的行为,在第一个
arr++之后,你指向没有你拥有的内存。 -
我不明白反对意见。我同意代码非常糟糕。但那家伙尝试了一些东西,但并没有像他预期的那样奏效。恕我直言,这个问题非常合理,不值得反对。
-
@LucM "输出是:argc = a argc = b argc = c" 根本不正确。我不赞成那些声称无稽之谈的问题,因为它们表明提问者缺乏努力(甚至懒得复制/粘贴实际结果)。
-
@EricPostpischil 除了从“argc”更改为“arr 1”等等 - 这正是我的意思。
标签: c