为什么结果为乱码?

marq0123 2009-11-21 07:10:36
#include <stdio.h>

int main(){
int i=0;
char (*p)[20];
char str[20] = "hello world";
p = str;
for(; i<20; i++)
printf("%c",p[i]);

return 0;
}
...全文
136 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
东大坡居士 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lxfhfut 的回复:]
char (*p)[20];表示一个指向二维数组的指针变量,该二维数组的列数为20或分解为一维数组的长度为20。
将一个一维数组的地址传给一个二维数组的指针当然不行了!
char *p;指的是一个一维数组指针当然可以有p=str了。至于你问为什么*(p+i)可以,而p[i]不可以,是因为你没注意到前面是char *p,而不是char (*p)[20]!
[/Quote]

说的比较详细了~~~~
主要是类型不匹配的问题。。
pombo 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 marq0123 的回复:]
C/C++ code#include<stdio.h>int main(){int i=0;char (*p)[20];char str[20]="hello world";
p= str;for(; i<20; i++)
printf("%c",p[i]);return0;
}
[/Quote]
str是个一维数组,不能赋给二维数组的指针
lxfhfut 2009-11-21
  • 打赏
  • 举报
回复
char *p[20]这是一个指针数组,每一个元素都是一个指针。
如果要用指针数组的话可改下:
#include <stdio.h>

int main(){
int i=0;
char *p[20];
char str[20] = "hello world";
p[0]= str;
for(; i<20; i++)
printf("%c",p[0][i]);

return 0;
}
vanchristin 2009-11-21
  • 打赏
  • 举报
回复
如果非要用数组指针的话,可以这样写
char *p[20];
前两天才学到的,希望没有写错
Mechain 2009-11-21
  • 打赏
  • 举报
回复
目前还看不懂
lxfhfut 2009-11-21
  • 打赏
  • 举报
回复
#include <stdio.h>
int main(int argc,char* argv[])
{int i=0;
char (*p)[20];
char str[20]="hello world";
p=&str;
for(; i <20; i++)
printf("%c",(*p)[i]);
return0;
}
对于上面的代码,&str是吧一个一维数组的首地址的地址赋给一个二维数组是可以的,而(*p)[i],是先取p所指的值也就是一维数组的地址,在加一个i的偏移量就是str[i]的值了,清楚了吗?
lxfhfut 2009-11-21
  • 打赏
  • 举报
回复
char (*p)[20];表示一个指向二维数组的指针变量,该二维数组的列数为20或分解为一维数组的长度为20。
将一个一维数组的地址传给一个二维数组的指针当然不行了!
char *p;指的是一个一维数组指针当然可以有p=str了。至于你问为什么*(p+i)可以,而p[i]不可以,是因为你没注意到前面是char *p,而不是char (*p)[20]!
marq0123 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 delphiwcdj 的回复:]
问题是类型不匹配。改为:
C/C++ code
#include<stdio.h>int main(int argc,char* argv[])
{int i=0;char (*p)[20];char str[20]="hello world";
p=&str;for(; i<20; i++)
printf("%c",(*p)[i]);return0;
}
[/Quote]
为什么类型不匹配,char (*p)[20]定义的指针p指向是char数组,含有20个元素啊?
z569362161 2009-11-21
  • 打赏
  • 举报
回复
#include <stdio.h>
int main(int argc, char* argv[])
{
int i=0;
char *p;
char str[20] = "hello world";
p = str;
for(; i<20; i++)
printf("%c",p[i]);

return 0;
}
VC++6.0可以过
zhaixingchen 2009-11-21
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(){
int i=0;
char (*p)[20];
char str[20] = "hello world";
p = str;
for(; i<20; i++)
printf("%c",(*p)[i]);

return 0;
}
delphiwcdj 2009-11-21
  • 打赏
  • 举报
回复
问题是类型不匹配。改为:

#include <stdio.h>


int main(int argc, char* argv[])
{
int i=0;
char (*p)[20];
char str[20] = "hello world";
p = &str;
for(; i<20; i++)
printf("%c",(*p)[i]);

return 0;
}
la_feng 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 marq0123 的回复:]
引用 3 楼 la_feng 的回复:
错了,原来不是那原因,那个是有默认初始化的值的C/C++ code#include <stdio.h>int main(){int i=0;char*p;char str[20]="hello world";
    p= str;for(; i <20; i++)
      printf("%c",*(p+i));return0;
}

为什么*(p+1)可以而p[i]就不可以?
[/Quote]指针就用指针的操作,数组就用数组的操作,我不考究那么多为什么
z0203153008 2009-11-21
  • 打赏
  • 举报
回复
把char (*p)[20]换成char *p
z0203153008 2009-11-21
  • 打赏
  • 举报
回复
p[i]不可以?
你估计没明白,主要在这里
[Quote=引用楼主 marq0123 的回复:]
char (*p)[20];
char str[20]="hello world";
[/Quote]
stardust20 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 marq0123 的回复:]
引用 3 楼 la_feng 的回复:
错了,原来不是那原因,那个是有默认初始化的值的C/C++ code#include <stdio.h>int main(){int i=0;char*p;char str[20]="hello world";
    p= str;for(; i <20; i++)
      printf("%c",*(p+i));return0;
}

为什么*(p+1)可以而p[i]就不可以?
[/Quote]
你是说printf("%c",*(p+i));我这边试了都可以啊
marq0123 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stardust20 的回复:]
char (*p)[20];->char *p
[/Quote]
为什么char *p,但char (*p)[20]不可以?
marq0123 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 la_feng 的回复:]
错了,原来不是那原因,那个是有默认初始化的值的C/C++ code#include<stdio.h>int main(){int i=0;char*p;char str[20]="hello world";
p= str;for(; i<20; i++)
printf("%c",*(p+i));return0;
}
[/Quote]
为什么*(p+1)可以而p[i]就不可以?
breezes2008 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stardust20 的回复:]
char (*p)[20];->char *p
[/Quote]
嗯!改下吧。
la_feng 2009-11-21
  • 打赏
  • 举报
回复
错了,原来不是那原因,那个是有默认初始化的值的
#include <stdio.h>

int main(){
int i=0;
char *p;
char str[20] = "hello world";
p = str;
for(; i<20; i++)
printf("%c",*(p+i));

return 0;
}
la_feng 2009-11-21
  • 打赏
  • 举报
回复
char str[20] = "hello world"; // 长度跟初始化的内容有差,后面的内容没有初始化
加载更多回复(1)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧