免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4652 | 回复: 18
打印 上一主题 下一主题

[C] 结构体指针的指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 15:41 |只看该作者 |倒序浏览


user *init_user()
{
    user *ui;
    ui = calloc(1,sizeof(user));
    return ui;
}

int xxx()
{
    user *ui_temp;
    ui_temp = init_user();
    ui_temp->id = 1;
    ......
    vvv(&ui_temp)
}

如果我的vvv函数是在其他文件。
我要在vvv函数或者其他函数修改ui_temp的值,是不是要把
ui_temp的指针传入啊?就是结构体指针的指针。
如果只把ui_temp传入行不行啊?它也是指针啊?
好像这样vvv(ui_temp).

论坛徽章:
0
2 [报告]
发表于 2008-11-18 15:56 |只看该作者
vvv(ui_temp)


这个不可以吗,结果不对吗

论坛徽章:
0
3 [报告]
发表于 2008-11-18 15:59 |只看该作者
(struct user *) * p
(void *) * p
int * p
int p


都是一样的

[ 本帖最后由 net_robber 于 2008-11-18 16:01 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-11-18 16:00 |只看该作者

回复 #2 lovebible 的帖子

对c不熟
不过听说
如果要修改一个数据,就把它的指针传入。
如果要修改一个指针指向的数据,那就把它的指针的指针传入。
不知道对否?

我这里不是试验,因为手头上没有硬件

论坛徽章:
0
5 [报告]
发表于 2008-11-18 16:03 |只看该作者
原帖由 net_robber 于 2008-11-18 15:59 发表
(struct user *) * p
(void *) * p
int * p
int p


都是一样的

看不懂...版主明示 谢

论坛徽章:
0
6 [报告]
发表于 2008-11-18 16:03 |只看该作者
实在难以理解

你就这么理解

typedef struct user{} A
typedef A* B
typedef B* int
int p


这么理解也会带来问题,但是至少,当前, 能把你从牛角尖里 带出来

论坛徽章:
0
7 [报告]
发表于 2008-11-18 16:06 |只看该作者
vvv(ui_temp).
这样可以。

论坛徽章:
0
8 [报告]
发表于 2008-11-18 16:09 |只看该作者
原帖由 cugb_cat 于 2008-11-18 16:06 发表
vvv(ui_temp).
这样可以。

有时候,需要改变指针本身,而不是指针指向的空间时,不可以

楼主给出的不是完整代码

论坛徽章:
0
9 [报告]
发表于 2008-11-18 16:14 |只看该作者
大家看看这个...
刚google到的
http://topic.csdn.net/t/20050316/23/3857131.html

论坛徽章:
0
10 [报告]
发表于 2008-11-18 16:14 |只看该作者
原帖由 net_robber 于 2008-11-18 16:09 发表

有时候,需要改变指针本身,而不是指针指向的空间时,不可以

楼主给出的不是完整代码

我觉得楼主给的代码段应该比较清楚的说明问题了吧
init返回的是个结构,如果要修改指针本身,那原来的内存就丢了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP