不同文件中struct地址传递空值?

johndiyang 2006-12-20 06:51:19
有两个文件
agent.cpp
typdef struct info
{
int a;
int b;
}INFO;
INFO g_rInfo;

int main()
{
g_rInfo.b=2;
nm(&g_rInfo);
printf(rInfo);
return 0;
}
文件2
nm.cpp

int nm (INFO * prInfo)
{
prInfo->a=3;
printf(prInfo);
return 0;
}


为什么输出的结果是
a=3
b=2
a=0
b=2
通过地址传递怎么没有改变a的值?
不同文件之间怎么传递该结构体,能改变a的值?
...全文
240 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzx1983 2006-12-22
  • 打赏
  • 举报
回复
奇哉怪也,我这里可以编译通过的说。
johndiyang 2006-12-21
  • 打赏
  • 举报
回复
加上volatile之后的错误:

agent.cpp:58: ISO C++ forbids declaration of `type name' with no type
agent.cpp:58: warning: format argument is not a pointer (arg 2)

我一点都不懂volatile,看了网上的一些介绍也云里雾里的。
yzx1983 2006-12-21
  • 打赏
  • 举报
回复
估计又是优化惹的祸……

你不妨试试在main的printf里这样写:
printf("a = %d, b = %d \r\n",(volatile)g_rInfo.a,(volatile)g_rInfo.b);
johndiyang 2006-12-21
  • 打赏
  • 举报
回复
test..........是在main中赋值的
其他结构体的成员是在nm中赋值的



感觉是全局定义的错误,只是不知道错在哪里了。
定义成局部变量,也不能得到预期效果
但是把nm的实现放到main函数的文件中就能得到实际的效果
johndiyang 2006-12-21
  • 打赏
  • 举报
回复
[nm]sAgentId=test..........
[nm]:sAgentId=test..........,IPADDR=192.168.0.200,DISK=9835584,Memory=255264.
[Debug] [agent]:sAgentId=test..........,IPADDR=,Disk=0,Memory=48


我也测试过了上边的程序。结果确实是
a=3
b=2
a=3
b=2
---------------------------------------
如果 g_rInfo 是局部的,
比如是在 main 中定义的
...........................
我也这样操作了,可是结果。。。。实际应用的程序就像最上边那样,在里面能修改,在外面却没有结果。。。。
johndiyang 2006-12-21
  • 打赏
  • 举报
回复
我把他写到main函数的头文件中了 :( 虽然系统结构组织的不好,但没办法。

明天再帖吧


很遗憾的说:好象这样也是错的
(volatile int)
yzx1983 2006-12-21
  • 打赏
  • 举报
回复
sorry……

这样写试试
printf("a = %d, b = %d \r\n",(volatile int)g_rInfo.a,(volatile int)g_rInfo.b);

其实我这边不用加任何东西,直接就是
3
2
3
2
你要是还不行的话,把完整的代码和编译环境贴出来看下
johndiyang 2006-12-21
  • 打赏
  • 举报
回复
灌水

绝对是最标准的“灌水语法”


刚试过了,外部变量也不能通过nm改变成员值

我原来做的时候是可以通过这样的方法传递值的,后来增加新的功能不知道改什么地方了,那个值就是传不过来。如果把nm的实现放在main函数的文件中,是可以传送值的
macnab 2006-12-21
  • 打赏
  • 举报
回复
灌水
jixingzhong 2006-12-20
  • 打赏
  • 举报
回复
extern INFO g_rInfo; //外部声明
int nm () //不需要参数了 ~~
{
g_rInfo.a=3;
printf(g_rInfo);
return 0;
}


如果 g_rInfo 是局部的,
比如是在 main 中定义的,
那么原来的程序可以正常工作 ...
jixingzhong 2006-12-20
  • 打赏
  • 举报
回复
不过,
你的 INFO g_rInfo; 都是全局定义的,
还需要传递么?

直接使用就可以了啊,
增加一个 外部声明:
nm.cpp

extern INFO g_rInfo; //外部声明一下就可以了 ~~
int nm (INFO * prInfo)
{
prInfo->a=3;
printf(prInfo);
return 0;
}
jixingzhong 2006-12-20
  • 打赏
  • 举报
回复
没有问题 !~!
ma100 2006-12-20
  • 打赏
  • 举报
回复
我运行a=3
cmail 2006-12-20
  • 打赏
  • 举报
回复
main中打印的是rInfo啊,没看到声明,信息没给全。

69,382

社区成员

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

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