#include<stdio.h>
int main() {
int n;
char name[8],*names[10000];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", &name);
names[i] = name;
}
for (int i = 0; i < n; i++) {
printf("%s\n", names[i]);
}
}
#include<stdio.h>
int main() {
int n;
char name[8],*names[10000];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", &name);
names[i]=name;//指针数组记录了name的n次地址,没有记录name的值;
}//name被赋了n次值 ,最后一次赋值把前面的赋值都覆盖了;
for (int i = 0; i < n; i++)
{
printf("%s\n",names[i]);//指针数组names中的所有的地址都是name首地址;
}//又因为name的值最后一次赋值后的值;所以一直输出最后一次的赋值;
}
——————————————————————————
下面是稍作修改的代码
#include<stdio.h>
int main() {
int n;
char name[8][1111],*names[10000];//将name改为二维数组
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%s",name[i]);//
names[i]=name[i];//
}
for(int i = 0; i < n; i++)
{
printf("%s\n",names[i]);
}
}
names是指针,name不是
追答name是指针,它是一个数组,数组名本身就是指针。