Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我能';如果我通过指针给了数组一个值,那么我是否可以使用数组引用来更改数组中的值?_C_Arrays_Pointers - Fatal编程技术网

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]
不一样。