关于结构体的指针传递,弄晕了,高手帮忙解释下...

njupt_ytp 2011-10-23 06:05:21

//第一个
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}*link;

int InitLink(link *p){
*p = (link) malloc(sizeof(node));
(*p)->data = 100;
(*p)->next = NULL;
return 1;
}
void main(){
link p;
InitLink(&p);
printf("%d",p->data);
}


//第二个
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}*link;

int InitLink(link p){
p->data = 100;
p->next = NULL;
return 1;
}
void main(){
link p;
p = (link) malloc(sizeof(node));
InitLink(p);
printf("%d",p->data);
}

请问两种指针的传递有什么区别呢?
...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
njupt_ytp 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 programmingring 的回复:]
引用 9 楼 njupt_ytp 的回复:

引用 8 楼 ol_lo 的回复:
哦,c中没引用。。。你那种方法是不行的,因为只是对临时变量p进行了修改


恩,主要是这块不清楚,听你说了好像有点明白了...C/C++ code
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct……
[/Quote]
明白了,谢啦~~
ProgrammingRing 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 njupt_ytp 的回复:]

引用 8 楼 ol_lo 的回复:
哦,c中没引用。。。你那种方法是不行的,因为只是对临时变量p进行了修改


恩,主要是这块不清楚,听你说了好像有点明白了...C/C++ code
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}*link;……
[/Quote]
是撒。。这个当然可以啊。。主函数p和函数中的p指向的地址是一样的。。你那个在函数中malloc的,如果用这个话。。指向的地址就不一样了。。你可以打印一下他们地址就知道了
njupt_ytp 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ol_lo 的回复:]
哦,c中没引用。。。你那种方法是不行的,因为只是对临时变量p进行了修改
[/Quote]

恩,主要是这块不清楚,听你说了好像有点明白了...
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}*link;

int InitLink(link p){
p->data = 100;
p->next = NULL;
return 1;
}
void main(){
link p;
p = (link) malloc(sizeof(node));
InitLink(p);
printf("%d",p->data);
}

但是这种方法,竟然也可以,大侠,再麻烦您帮我解释下吧...
Ol_lO 2011-10-23
  • 打赏
  • 举报
回复
哦,c中没引用。。。你那种方法是不行的,因为只是对临时变量p进行了修改
Ol_lO 2011-10-23
  • 打赏
  • 举报
回复

int InitLink(link &p)


加个引用,否则main是得不到p的更新的
njupt_ytp 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ol_lo 的回复:]
引用 1 楼 njupt_ytp 的回复:

主要是问什么第二个没有传递指针过去,初始化也起到效果了呢?我刚看链表这部分,有点迷糊~~

p就是指向node的指针,只不过是定义了一个新的类型link
[/Quote]
奥,第二个明白了。。
第一个呢?写成这样行不?

#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}*link;

int InitLink(link p){
p = (link) malloc(sizeof(node));
p->data = 100;
p->next = NULL;
return 1;
}
void main(){
link p;
InitLink(p);
printf("%d",p->data);
}

这里p也是只想node的指针,运行的时候却会报错,我主要是在给P分配内存的时候两种方法不一致的时候不是很明白...
Ol_lO 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 njupt_ytp 的回复:]

引用 2 楼 ol_lo 的回复:
一个是指针的指针,另一个是指针

第一个如果写成InitLink(p)这样会出错,问什么?p也是指针啊...
[/Quote]
p是指针,但是那个函数需要指针的指针
Ol_lO 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 njupt_ytp 的回复:]

主要是问什么第二个没有传递指针过去,初始化也起到效果了呢?我刚看链表这部分,有点迷糊~~
[/Quote]
p就是指向node的指针,只不过是定义了一个新的类型link
njupt_ytp 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ol_lo 的回复:]
一个是指针的指针,另一个是指针
[/Quote]
第一个如果写成InitLink(p)这样会出错,问什么?p也是指针啊...
Ol_lO 2011-10-23
  • 打赏
  • 举报
回复
一个是指针的指针,另一个是指针
njupt_ytp 2011-10-23
  • 打赏
  • 举报
回复
主要是问什么第二个没有传递指针过去,初始化也起到效果了呢?我刚看链表这部分,有点迷糊~~

69,374

社区成员

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

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