C 为什么我能';如果我通过指针给了数组一个值,那么我是否可以使用数组引用来更改数组中的值?
我的程序如下所示:C 为什么我能';如果我通过指针给了数组一个值,那么我是否可以使用数组引用来更改数组中的值?,c,arrays,pointers,C,Arrays,Pointers,我的程序如下所示: char a[10]; char (*pa)[10]; pa = a; a[0] = 'g'; *pa[1] = 'h'; printf("%c", *pa[0]); printf("%c\n", *pa[1]); a[0] = 'r'; a[1] = 'd'; printf("%c", *pa[0]); printf("%c", *pa[1]); 当我运行它时,我得到了输出: gh rh 为什么要排队 a[1] = 'd' 不将值更改为“d”?您只将a[0]的值分配给
char a[10];
char (*pa)[10];
pa = a;
a[0] = 'g';
*pa[1] = 'h';
printf("%c", *pa[0]);
printf("%c\n", *pa[1]);
a[0] = 'r';
a[1] = 'd';
printf("%c", *pa[0]);
printf("%c", *pa[1]);
当我运行它时,我得到了输出:
gh
rh
为什么要排队
a[1] = 'd'
不将值更改为“d”?您只将
a[0]
的值分配给*pa[0]
(有基址值),但不分配第二个元素的值。pa是指针数组,pa[0]指向a[0]处的数组“a”,但pa[1]没有指向a[1]。打开编译器警告并将每个警告视为错误。如果你这样做了,你会有很多更具体的问题要问,比如“这意味着什么?”而不是“为什么这个1000000行程序会崩溃?”(假设你不知怎么写了一个1000000行程序)。pa=a代码>-->pa=&a
然后使用(*pa)[index]
或pa[0][index]
@Bluepixy,救命!我又迷上打字了。。。我解析:pa
是一个指向10个字符数组的指针a[10]
是一个包含10个字符的数组。编译器将数组视为指针,现在应该将a
的地址分配给pa=a
中的pa
,但会抱怨并只接受pa=&a
。哪里出错?*pa[1]
和(*pa)[1]
不一样。