首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大家帮忙啊一个简单的指针小程序,搞糊涂了解决办法

2012-02-17 
大家帮忙啊!一个简单的指针小程序,搞糊涂了structNode{intdata}Change(structNode*head,structNode*p){h

大家帮忙啊!一个简单的指针小程序,搞糊涂了
struct   Node
{
  int   data;
};


Change(struct   Node   *head,struct   Node   *p)
{
  head-> data=100;
//   p-> data=head-> data;请大家看这两句
//   p=head;                      
  printf( "head:%d   p:%d\n ",head-> data,p-> data);
}

main()
{
  struct   Node   *head,*p;
  head=(struct   Node   *)malloc(sizeof(struct   Node));
  Change(head,p);
  printf( "head:%d   p:%d ",head-> data,p-> data);
  getch();
}

如果用上边那句p-> data=head-> data,则结果为:
head:100   p:100
head:100   p:100
如果用下边那句p=head,则结果为:
head:100   p:100
head:100   p:-6144
请大家帮忙解释一下,出现这个问题的原因,并且如果我想用p=head改变p的data值,   代码应该怎么写??拜托啊!!实在是晕了.

[解决办法]
第一中不会出错吗? p没有指向的!
第二种第一次printf不会有问题!可是第二个p还是没有指向。。。
[解决办法]
head=(struct Node *)malloc(sizeof(struct Node));
只给head初始化了,没有给p初始化,p-> data=head-> data;这句不是会有问题吗。

抛下这个不管,p=head是指针操作,只是把p指向了head指向的地址,不会对p原来指向的内容改变。要想通过p=head改变p-> data的话要操作符重载。
[解决办法]

指针和指针指向的对象是两个不同的变量。
p 是指针自己
*p 是指针所指的对象
p-> data 是指针所指对象的成员

要分清不同的主体关系,才能准确定义语义。


[解决办法]
如果想改变传入指针本身。
1、可以传入二级指针(指针的指针)change函数声明如下
Change(struct Node *head,struct Node **p)

2、传入指针的引用 change函数声明如下
Change(struct Node *head,struct Node *&p)

热点排行