大家帮忙啊!一个简单的指针小程序,搞糊涂了
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)