| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 861 人关注过本帖
标题:C结构体指针
只看楼主 加入收藏
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
结帖率:62.07%
收藏
已结贴  问题点数:5 回复次数:10 
C结构体指针
typedef strut printf_receipt
{
  char a;
  char b;
  char c;
}receipt;

void __printf_(teceipt *num)
    {
      num->c=99;
    printf("%d\n",num->c)
    }
main()
{
receipt text;
__printf_(&text);//这里为什么输出 99  向函数 传递了指向结构的指针  
                //这句话应该怎么理解  text只是个结构 并不是针针啊 但是是同一个结构 我在VC下可以正常输出 这是为什么
}
搜索更多相关主题的帖子: 结构体 
2013-03-14 22:51
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 
你把c赋值为99 了,再输出c,当然是99了

你的printf 后面是否漏了分号?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-14 22:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
yu版也是夜猫子哦

DO IT YOURSELF !
2013-03-14 22:59
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 2楼 yuccn
我的意思是  我的结构体可是text哦
2013-03-14 23:25
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 2楼 yuccn
void __printf_(teceipt *num)//这是函数定义

而我调用的是这样的
receipt text;//这个可不是指针
我在VC下试过 receipt *text;
也是可以的


__printf_(&text);
如果直接调那个函数我是理解的 但是 调用 __printf_(&text);也能输出 为什么
我想知道为什么
这里的参数 &text 和text  *text到底应该怎么理解 糊涂了
__printf_(&text);


[ 本帖最后由 duzhiming 于 2013-3-14 23:32 编辑 ]
2013-03-14 23:26
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:1 
函数调用是形参和实参结合的过程
receipt text;这个是一个结构体
void __printf_(teceipt *num)
这个函数需要一个结构体指针,同时内部代码表明,要对结构体内部成员操作;num->c=99;
记住num是形参;而你的text就是实际调用函数时候的实参了;
你用过 receipt *text;这样从函数原型看是没有问题的,但是代码逻辑上是有问题的。
因为你声明的只是一个receipt *类型的指针,而且没有初始化,就是个野指针;你传递给了 __printf_(text),这样函数内部根据这个指针去访问内存就会报段错误了。


经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-15 07:02
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:1 
回复 6楼 pauljames
说实话,我没看懂你在说什么,什么野指针,楼主调用的时候传的是变量的地址,用&取地址,是指针,怎么会是野指针?

总有那身价贱的人给作业贴回复完整的代码
2013-03-15 10:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 duzhiming
楼主,麻烦查阅资料看看"&"是干什么用的!!!
__printf_(&text);//这里为什么输出 99 向函数 传递了指向结构的指针                //这句话应该怎么理解  text只是个结构 并不是针针啊

总有那身价贱的人给作业贴回复完整的代码
2013-03-15 10:58
i524790636
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-10-21
收藏
得分:1 
楼主贴的代码里面好多错误啊,问题也没看太懂要问什么,是问为什么输出“99”?你传递了“&text”当然要输出99啊,“&”就是用来取址的啊,编译器默认的将“&text”当成了指针。
2013-03-15 11:30
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
回复 7楼 embed_xuel
楼主说:我在VC下试过 receipt *text;
我的理解是,他想用print(text)这样去调用函数
因为从函数原型来说,参数也是兼容的,但是text就是个没有赋值的指针;
至于用receipt text,然后print(&text)这样调用当然是可以的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-15 19:58
快速回复:C结构体指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021708 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved