标题:BlueGuy,来做做题目。
取消只看楼主
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
 问题点数:0 回复次数:2 
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
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
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-314362-1-1.html




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

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