返回信息流☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 10:16:02 2010) 提到:
int cr_lsdb_router_find(struct cr_lsdb_router* result, u_int32_t rt_id, int lsdb_id)
{
int r;
struct router_node* p;
r = lsdb_router_find(rt_id, &p, (struct lsdb*)lsdb_id);
if(!r)
{
result = (struct cr_lsdb_router*)malloc(sizeof(struct cr_lsdb_router));
*result = p->data;
}
return r;
}
偶把result以形参的形式放在那里,其实是做返回值来用的,想让它返回p->data
可是,调用这个子函数后,result的值没能传出来,why?why?why?
在线等,非常感谢!
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 10:32:26 2010) 提到:
我用的编译器是eclipse
我也能确保if条件满足
调试过程中result的内容确实改变了,就是没传出来
☆─────────────────────────────────────☆
jmpesp (民国沉思者|邓丽君) 于 (Thu Mar 25 10:44:49 2010) 提到:
【 在 salooloo 的大作中提到: 】
: int cr_lsdb_router_find(struct cr_lsdb_router* result, u_int32_t rt_id, int lsdb_id)
: {
: int r;
: ...................
这样改
int cr_lsdb_router_find(struct cr_lsdb_router*& result, u_int32_t rt_id, int lsdb_id)
或者int cr_lsdb_router_find(struct cr_lsdb_router** result, u_int32_t rt_id, int lsdb_id)
☆─────────────────────────────────────☆
DrJan ( DrJan) 于 (Thu Mar 25 10:58:18 2010) 提到:
或者在调用者里分配空间 再把指针传进来
LZ现在这样和
void test(int a)
{
a = 1;
}
int main()
{
int b = 0;
test(b);
return 0;
}
异曲同工
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 11:10:15 2010) 提到:
不 完全不一样 我传的是指针,改变的是指针的内容
void test(int* a)
{
*a = 1;
}
int main()
{
int b = 0;
test(&b);
return 0;
}
我的是这种形式
【 在 DrJan 的大作中提到: 】
: 或者在调用者里分配空间 再把指针传进来
: LZ现在这样和
: void test(int a)
: ...................
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 11:11:17 2010) 提到:
改成双指针是能解决问题 但我觉得我那样写也没错啊
【 在 jmpesp 的大作中提到: 】
: 这样改
: int cr_lsdb_router_find(struct cr_lsdb_router*& result, u_int32_t rt_id, int lsdb_id)
: 或者int cr_lsdb_router_find(struct cr_lsdb_router** result, u_int32_t rt_id, int lsdb_id)
☆─────────────────────────────────────☆
Blunt (DEK) 于 (Thu Mar 25 11:18:16 2010) 提到:
若!r成立,你的result指针就变了,和实参的指针不一样,此时改变的不是实参指向的对象的值。result是复制传递的,你若想通过它传递出值,result不能变。
☆─────────────────────────────────────☆
jmpesp (民国沉思者|邓丽君) 于 (Thu Mar 25 11:33:35 2010) 提到:
【 在 salooloo 的大作中提到: 】
: 改成双指针是能解决问题 但我觉得我那样写也没错啊
你那写的是错的 怎么会没错
形参是传值的
☆─────────────────────────────────────☆
Blunt (DEK) 于 (Thu Mar 25 12:01:43 2010) 提到:
呵呵,这个是没问题的,指针是值传递没错,所以result有一个指针副本,和实参是指向同一个对象的,对result所指对象的操作因此就是对实参所指对象进行操作。
【 在 jmpesp 的大作中提到: 】
: 你那写的是错的 怎么会没错
: 形参是传值的
☆─────────────────────────────────────☆
jmpesp (民国沉思者|邓丽君) 于 (Thu Mar 25 12:11:59 2010) 提到:
【 在 Blunt 的大作中提到: 】
: 呵呵,这个是没问题的,指针是值传递没错,所以result有一个指针副本,和实参是指向同一个对象的,对result所指对象的操作因此就是对实参所指对象进行操作。
你离题了 注意看清题目
☆─────────────────────────────────────☆
Blunt (DEK) 于 (Thu Mar 25 12:37:59 2010) 提到:
但按她的意思,她不是要通过result返回p->data吗?呵呵。
【 在 jmpesp 的大作中提到: 】
: 你离题了 注意看清题目
☆─────────────────────────────────────☆
jmpesp (民国沉思者|邓丽君) 于 (Thu Mar 25 12:42:40 2010) 提到:
【 在 Blunt 的大作中提到: 】
: 但按她的意思,她不是要通过result返回p->data吗?呵呵。
形参跟实参非同一内存单元
☆─────────────────────────────────────☆
Blunt (DEK) 于 (Thu Mar 25 12:48:47 2010) 提到:
这个我也知道的。她如果确实是为了仅传result的值,那我错了,没看清题意。看她的描述,我怎么觉得她只是想通过result传其指向的内容啊。
【 在 jmpesp 的大作中提到: 】
: 形参跟实参非同一内存单元
☆─────────────────────────────────────☆
DrJan ( DrJan) 于 (Thu Mar 25 13:06:45 2010) 提到:
仔细想想 其实是一样的
因为你传了一个指针
然后在被调里面 对这个指针malloc赋值 注意你malloc的时候是对这个指针赋值
然后你把向malloc到的内存中填充内容 这一点没错
但是你返回以后 你穿进去的指针的值没变 并不是你malloc分配的地址
真的和我说的例子是一个原理
【 在 salooloo 的大作中提到: 】
: 不 完全不一样 我传的是指针,改变的是指针的内容
: void test(int* a)
: {
: ...................
☆─────────────────────────────────────☆
rainblue (everyday BUPT & BYR) 于 (Thu Mar 25 14:20:55 2010) 提到:
【 在 salooloo 的大作中提到: 】
: int cr_lsdb_router_find(struct cr_lsdb_router* result, u_int32_t rt_id, int lsdb_id)
: {
: int r;
: ...................
result = (struct cr_lsdb_router*)malloc(sizeof(struct cr_lsdb_router));
这句话去掉即可。。
☆─────────────────────────────────────☆
wangzb (校园古惑仔) 于 (Thu Mar 25 14:38:25 2010) 提到:
re,同不明白为什么还要malloc一个,后面谁负责来释放呢,函数的调用者吗。。。
【 在 rainblue 的大作中提到: 】
: result = (struct cr_lsdb_router*)malloc(sizeof(struct cr_lsdb_router));
: 这句话去掉即可。。
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 15:56:16 2010) 提到:
恩 我确实是想通过result返回p->data
【 在 Blunt 的大作中提到: 】
: 但按她的意思,她不是要通过result返回p->data吗?呵呵。
☆─────────────────────────────────────☆
Blunt (DEK) 于 (Thu Mar 25 16:25:25 2010) 提到:
哦,那现在你知道原因了吧?
【 在 salooloo 的大作中提到: 】
: 恩 我确实是想通过result返回p->data
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Thu Mar 25 18:25:18 2010) 提到:
恩 找到了 malloc应该在主调函数中
谢谢大家
【 在 Blunt 的大作中提到: 】
: 哦,那现在你知道原因了吧?
☆─────────────────────────────────────☆
jmpesp (民国沉思者|邓丽君) 于 (Thu Mar 25 18:27:02 2010) 提到:
【 在 salooloo 的大作中提到: 】
: 恩 找到了 malloc应该在主调函数中
: 谢谢大家
这个不一定吧 看需求了 你那样写也不见得就不优雅
这是一条镜像帖。来源:北邮人论坛 / cpp / #37152同步于 2010/3/28
CPP机器人发帖
[合集] 请教关于返回值的问题
shenlei
2010/3/28镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。