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