| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1959 人关注过本帖
标题:BlueGuy,来做做题目。
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
收藏
 问题点数:0 回复次数:22 
BlueGuy,来做做题目。

1.这段程序会有什么行为。
为什么会有这样的行为。

程序代码:
struct S{
        int i;
        int * p;

 };
int main()
{
      S s;
      int *p = & s.i;
      p[0]=4;
      p[1]=3;
      s.p=p;
      s.p[1]=1;
      s.p[0]=2;
}

2. 这两个struct的大小一样大吗?
     如果要让这两个struct大小一样。如何指定编译器进行操作。
程序代码:
struct Data1{
    int a;
    char b;
    char c;
    };

 
    struct Data2{
    char b;
    int a;
    char c;
    };




[ 本帖最后由 Devil_W 于 2010-7-30 09:50 编辑 ]
搜索更多相关主题的帖子: BlueGuy 
2010-07-30 09:38
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
LZ 你那个小的s是那里来的
2010-07-30 09:48
Hantongxiao
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-29
收藏
得分:0 
这种题挺适合我这种新人练手啊。
第一个,s.p=p; s.p[1]=1; 把p指向了s.i,s.p=p就把s.p指向了s.i,s.p[1]就是s.p了,被强制赋值成1,就是s.p的指向是内存地址1,应该是一个不可写入的地址,下面再进行s.p[0]的赋值操作,程序就崩溃。
第二个更好做了,地址对齐。第二种比第一种浪费一个int的空间。
收到的鲜花
2010-07-30 10:05
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用Hantongxiao在2010-7-30 10:05:17的发言:

这种题挺适合我这种新人练手啊。
第一个,s.p=p; s.p[1]=1; 把p指向了s.i,s.p=p就把s.p指向了s.i,s.p[1]就是s.p了,被强制赋值成1,就是s.p的指向是内存地址1,应该是一个不可写入的地址,下面再进行s.p[0]的赋值操作,程序就崩溃。
第二个更好做了,地址对齐。第二种比第一种浪费一个int的空间。
如果要让这两个struct大小一样。如何指定编译器进行操作。
你眼力很好,第一个问题回答的很到位。

第2个问题的第2问,你还没搞定。
2010-07-30 10:07
Hantongxiao
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-29
收藏
得分:0 
我觉得最简单的就是把顺序理一下,排列整齐就行了。还有似乎有一种可以指定位数的定义方式,加个“:位数”,似乎是这种形式,不知道管用不,要翻书了。其他不知道了。
收到的鲜花
  • sunyh19992010-07-30 10:14 送鲜花  5朵   附言:你很棒
  • Devil_W2010-07-30 10:19 送鲜花  -3朵   附言:你还要继续看书。
  • sunyh19992010-07-30 11:56 送鲜花  3朵   附言:再补上
  • 神vLinux飄飄2010-07-30 13:18 送鲜花  2朵  
2010-07-30 10:13
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:0 
回复 5楼 Hantongxiao
#pragma pack (1)

无聊创造奇迹。
2010-07-30 10:17
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:0 
__attribute__((packed))

2010-07-30 10:46
hongmaomao
Rank: 2
等 级:论坛游民
帖 子:87
专家分:15
注 册:2009-1-3
收藏
得分:0 
回复 5楼 Hantongxiao
顶你。新来论坛的?下次看到Devil_W这个东西发的贴子就别回了,不会给你答得好的85分,只会扣你答得不全的15分,记住了啊。
2010-07-30 10:46
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用hongmaomao在2010-7-30 10:46:42的发言:

顶你。新来论坛的?下次看到Devil_W这个东西发的贴子就别回了,不会给你答得好的85分,只会扣你答得不全的15分,记住了啊。

傻x,你觉得答的好的85分,是个写code的都应该会的。

往往在project里面就因为你没答好的15分,大家要花多少effort帮你这个垃圾修 bug.
2010-07-30 11:44
Hantongxiao
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-29
收藏
得分:0 
回复 8楼 hongmaomao
呵呵,没事,来论坛第一帖,看这个题也不是太难,就试试的。应该会的我会了我就很满意了。尽善尽美是高手的事情了,高手至今似乎只在教科书里看到过。

[ 本帖最后由 Hantongxiao 于 2010-7-30 12:06 编辑 ]
收到的鲜花
  • 黑洞2010-07-30 12:44 送鲜花  1朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • 神vLinuxx飘飘2010-07-30 12:46 送鲜花  1朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • rofor2010-07-30 12:48 送鲜花  5朵   附言:无须和他们纠结,你做得很对。 ——来自ro ...
  • 神linux飘飘2010-07-30 12:50 送鲜花  2朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • a1a2010-07-30 12:53 送鲜花  2朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • Iive412010-07-30 12:54 送鲜花  2朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • 五四三二一2010-07-30 12:55 送鲜花  2朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • 神vLinuz飘飘2010-07-30 12:57 送鲜花  2朵   附言:无须和他们纠结,你做得很对。 ——来自20 ...
  • 神vLinux飄飄2010-07-30 12:59 送鲜花  2朵   附言:先评这么多分吧。——神vLinux飄飄
  • 神vLinux飄飄2010-07-30 13:19 送鲜花  2朵  
  • 神vLinux飄飄2010-07-30 13:19 送鲜花  2朵  
  • 神vLinux飄飄2010-07-30 13:20 送鲜花  1朵  
  • 神vLinux飄飄2010-07-30 13:20 送鲜花  1朵  
  • 神vLinux飄飄2010-07-30 13:20 送鲜花  1朵  
  • 神vLinux飄飄2010-07-30 13:20 送鲜花  1朵  
  • 神vLinux飄飄2010-07-30 13:20 送鲜花  1朵  
2010-07-30 12:04
快速回复:BlueGuy,来做做题目。
数据加载中...
 
   



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

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