Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
带有指向数组指针的printf scanf_C_Arrays_Pointers - Fatal编程技术网

带有指向数组指针的printf scanf

带有指向数组指针的printf scanf,c,arrays,pointers,C,Arrays,Pointers,您好,我有一段代码,用指针填充数组,并用指针打印它。结果是福尔斯。这是我的密码: #include<stdio.h> #include<stdlib.h> int main(){ int p; char po[8]; char *i; i=po; for(p=0; p<8; p++){ scanf("%c\n", i++); } for(p=0; p<8; p++){ printf("%c\n", *(i++)); } return 0; } #包括 #包

您好,我有一段代码,用指针填充数组,并用指针打印它。结果是福尔斯。这是我的密码:

#include<stdio.h>
#include<stdlib.h>

int main(){
int p;
char po[8];
char *i;
i=po;
for(p=0; p<8; p++){
scanf("%c\n", i++);
}
for(p=0; p<8; p++){
printf("%c\n", *(i++));
}
return 0;
}
#包括
#包括
int main(){
INTP;
char-po[8];
char*i;
i=po;

for(p=0;p
i
已指向数组的末尾。要使用
p
作为索引打印
po

for(p=0; p<8; p++){
printf("%c\n", po[p]);

for(p=0;p问题是在第一个循环中递增的指针
i
将指向循环末尾的数组末尾(更准确地说,在为
po
分配的内存位置之后的下一个内存位置,即将指向不属于数组的
po[8]
),您可以添加

i = po;

在第二个循环之前,要使其再次指向
po
(指向
po[0]
)。

增加指针是有充分理由的。在重用指针之前,不要忘记将其重置为初始值

您的代码应该是:

i=po;
for(p=0; p<8; p++){
scanf("%c\n", i++);
} /* i is now po + 8 ... */
i = po;
for(p=0; p<8; p++){
printf("%c\n", *(i++));
}
i=po;

对于(p=0;p
scanf(“%c\n”,i++”);
…请不要编写此类代码。使用命令“i=po;”,i指向数组po[8]的第一个元素.对吗?是的,但只在那里。在那次赋值之后,你在读取输入的循环中递增
i
。这样它就不再指向
po
i=0;
将在下一次
printf
中取消引用
NULL
。太好了,你真的帮了!我会按照你的提示去做!我也会在后面考虑loop我必须重置I的值,如'I=po;'