q=&s[k]; //OK, *q=s[k]; not ok,为什么

panminghe 2009-02-06 05:56:25
main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k<5;k++)
{
q=&s[k]; //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return ;
}
...全文
147 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiudou1987 2009-02-08
  • 打赏
  • 举报
回复
up
qiudou1987 2009-02-08
  • 打赏
  • 举报
回复
up,
学习中》》》》
lunarfan 2009-02-08
  • 打赏
  • 举报
回复
逻辑上正确,语法上错误
deerwin1986 2009-02-08
  • 打赏
  • 举报
回复
你对未初始化的指针进行解引用操作 肯定会出错
另一个你是直接对这个指针本身进行赋值 就没错了...
Big鹏 2009-02-07
  • 打赏
  • 举报
回复
先赋一级指针,再赋二级指针,楼主也可以这样:

#include <stdio.h>

int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;
q=&s[0];
for(k=0;k <5;k++)
{
*q=s[k];
printf("%s\n",*q);
}
return 0;
}

shenjigong19801109 2009-02-06
  • 打赏
  • 举报
回复
你是什么开发环境,这样是可以的,但你的二重指针使用之前必须进行初始化,也就是说要指到一个合法的内存区域?OK
shenjigong19801109 2009-02-06
  • 打赏
  • 举报
回复
你是什么开发环境,这样是可以的
nineforever 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chin_chen 的回复:]
引用 4 楼 waizqfor 的回复:
引用 2 楼 chin_chen 的回复:
C/C++ code#include <cstdio>


int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k <5;k++)
{
*q=s[k]; //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return 0;
}


在dev c++中可以啊。

DEV C++ 编译能通过 估计运行会错


你为什么不自己把代码贴一下,运行一下…
[/Quote]

指针q没有初始化,开Wall会提示的
chin_chen 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 waizqfor 的回复:]
引用 2 楼 chin_chen 的回复:
C/C++ code#include <cstdio>


int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k <5;k++)
{
*q=s[k];  //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return  0;
}


在dev c++中可以啊。

DEV C++ 编译能通过 估计运行会错
[/Quote]

你为什么不自己把代码贴一下,运行一下看看。。我运行了,没错误。
sincor 2009-02-06
  • 打赏
  • 举报
回复
简单的说 指针 其实也是普通的存储单元
waizqfor 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chin_chen 的回复:]
C/C++ code#include <cstdio>


int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k <5;k++)
{
*q=s[k]; //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return 0;
}


在dev c++中可以啊。
[/Quote]
DEV C++ 编译能通过 估计运行会错
waizqfor 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 panminghe 的帖子:]
main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k <5;k++)
{
q=&s[k]; //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return ;
}
[/Quote]
char *s[]={"man","woman","girl","boy","sister"};
char **q; //q定义的是2J指针
*q=s[k];//1级指针为被初始化 所以不能直接这样用
所以要用
q=&s[k];
chin_chen 2009-02-06
  • 打赏
  • 举报
回复
#include <cstdio>


int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;

for(k=0;k <5;k++)
{
*q=s[k]; //OK, *q=s[k]; not ok,为什么

printf("%s\n",*q);
}

return 0;
}
在dev c++中可以啊。
tangshuiling 2009-02-06
  • 打赏
  • 举报
回复

q=&s[k]; //OK, *q=s[k]; not ok,为什么
在一级指针未初始化之前,就使用二级指针这类型的操作不被编译器所接受!(q为初始化就使用*q);
直接对一级指针赋值q=&s[k]; 此类操作是允许的

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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