这是怎么回事,为什么会发生地址错误呢

___NULL 2001-05-27 11:33:00
#include <stdio.h>
int main(int argc, char* argv[])
{
char *(*a)[3];
*a[0]="abcdefg";
*a[1]="hijklmn";
*a[2]="opqrst";

for(int i=0;i<2;i++)
printf("%s\n",*a[i]);

return 0;
}
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmas__garret 2001-05-28
  • 打赏
  • 举报
回复
兄弟,恕我直言,你对指针的理解还不够:
原来程序的错误是因为a是一个双重指针,但是并没有指向一块内存:
现在加入两行语句就可以了:

#include <stdio.h>

int main(int argc, char* argv[])
{
int i;
char *(*a)[3];

char aa[3][10];

a = aa;

*a[0]="abcdefg";
*a[1]="hijklmn";
*a[2]="opqrst";

for(i=0;i<2;i++)
printf("%s\n",*a[i]);

return 0;
}
NowCan 2001-05-28
  • 打赏
  • 举报
回复
你把简单的问题复杂化了。
NowCan 2001-05-28
  • 打赏
  • 举报
回复
还是holyfire的对。
定义那么多的指针干什么?
holyfire 2001-05-28
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
char *a[3];
a[0]="abcdefg";
a[1]="hijklmn";
a[2]="opqrst";

for(int i=0;i<2;i++)
printf("%s\n",a[i]);

return 0;
}
qingfang 2001-05-28
  • 打赏
  • 举报
回复
这个问题我认为主要是因为你的变量i的定义的问题。因为在c里面,变量要在前面定义。
但是你的i实在循环中定义的,所以是不对的,你可以将i定义到前面,放在char *(*a)[3]
附近,就行了。
如下:
#include <stdio.h>
int main(int argc, char* argv[])
{
char *(*a)[3];

int i; /*i在此处定义*/

*a[0]="abcdefg";
*a[1]="hijklmn";
*a[2]="opqrst";

for(i=0;i<2;i++) /*此处取消对i的定义*/
printf("%s\n",*a[i]);

return 0;
}


/*
*我很饼,不一定对,
*如果我错了,希望能指出来,
*碰巧对了,请加分!
*/

70,033

社区成员

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

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