指向指针的问题

hearlihong 2004-11-10 10:01:56
void Test(char **tem)
{
char **str;
*str= (char *)malloc(sizeof(char) *100);

/*这里这样写运行时错误,提示str没有定义的变量,
将char **str改成,char **str=tem成功!
*/

GetMemory(str);
}
void main(void)
{

char *tem;
Test(&tem);

/*上面的写法正确。
char **tem;
Test(tem);
这样的写法运行时错误提示tem是没有定义的变量,为什么?
*/

}
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire314159 2004-11-10
  • 打赏
  • 举报
回复
所以说p1,p2都是野指针.至于怎样为p2申请指向的空间,p1的作用就在这.即
char *p1;
char **p2;
p2=&p1;
*p2=(char *)malloc(...)等价于p1=(char *)malloc(...)
fire314159 2004-11-10
  • 打赏
  • 举报
回复
只要不是全局变量或者static局部变量,变量值都是随机的。
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
fire314159(不说废话了)
也就是说p2必须要有个初始值才能使用。
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
在.net环境中。
按fire314159(不说废话了) 的说法,
既然这样那,p2;如何分配空间呢?
p1,不时野指针,p2是野指针,是这个意思吗?
还是,p1不野,*p2不野,p2野,还是别的?
fire314159 2004-11-10
  • 打赏
  • 举报
回复
换句话说,先让p2知道自己指向哪里。即p2=address; 然后再*p2=(char *)malloc(....)
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
char *tem;
Test(&tem);
这里的解释好像有点问题,我觉得这里成功是因为,tem对象已经建立,所以,&tem是可以取到tem的地址的。

char **tem;
Test(tem);
这里也应该是一样的阿。为什么不成功呢?

如果按照你的初始化说法,哪第一个也不应该成功才对啊。因为*tem也没有被初始化

fire314159 2004-11-10
  • 打赏
  • 举报
回复
我们来简化一下问题。现在有一个指针p1指向char。有一个指向指针的指针p2。
定义如下:
char *p1;
char **p2;

楼主理所当然认为*p2是一个指向char的指针,这是正确的。但要注意!!我们必须首先找到p2指向的空间,然后再用这个空间来装动态分配的空间的地址。即:*p2=(char *)malloc(......)
但楼主注意了!你的p2还是野指针,也就是说,它都不知道自己指向哪里?更谈不上用它指向的空间来装动态分配的空间地址了。
说得非常土八路式,为了楼主好理解。
qingyuan18 2004-11-10
  • 打赏
  • 举报
回复
你这是在vc中还是tc?
在tc中变量是先定义后使用,char **tem;Test(tem);这里的tem应该在之前定义,
zhouhuahai 2004-11-10
  • 打赏
  • 举报
回复
问题2:
在你的main函数中,声明了char *tem;而之后没有对tem初始化,对tem初始化有三种方法:
1.先声明一个char 数组变量,再把此变量的地址赋给tem.如:
char x[]="temple";
char *tem;
tem=x;
2.直接初始化:
char *tem="temple";
3.用new 或malloc分配空间:
char *tem;
tem=(char *)malloc(sizeof(char)*100);

现在再来看问题1:
char **str--->str是个char型二级指针.那么在此不光str要初始化,连*str也要初始化.
因为此时str和*str都是指针.
而*str= (char *)malloc(sizeof(char) *100);中只对*str进行了初始化,但指针str并未初始化.
如改成char **str=tem;这样就对str和*str都进行了初始化.str被赋值为tem.*str被赋为*tem.
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
一共两个简单问题,大家来抢分阿。
abcdefu520 2004-11-10
  • 打赏
  • 举报
回复
不说废话

69,371

社区成员

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

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