| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 434 人关注过本帖
标题:求助 指针和结构体的混合使用
取消只看楼主 加入收藏
swyjpbzdy
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2010-1-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
求助 指针和结构体的混合使用
#include <stdio.h>
struct S{
int a;
int *b;
};
int main(void)
{
    struct S s;
    int *p;
    p=&s.a;
    p[1]=2;   
    p[0]=1;
    printf("%d,%d\n",s.a,s.b);
    s.b=p;
    s.b[1]=4;
    s.b[0]=3;
    printf("%d,%d\n",s.a,s.b);
}
这个程序运行出错,这个问题我想了很久,只知道是s.b[1]=4时出了问题,但具体搞不清楚为什么,有没高手帮解释下?
搜索更多相关主题的帖子: 结构体 指针 
2010-01-29 10:23
swyjpbzdy
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2010-1-29
收藏
得分:0 
回复 2楼 xinjinlong
你的意思我不是非常明白
你的意思是不是在执行s.b=p;之后执行无论是执行s.b[1]=4;,
还是执行s.b[0]=3都是错的呢?
我后来想了下 你看是不是这样的
比如  执行struct S s;int *p;后  
       地址     内容
s.a  200      ?
s.b  204      ?
p     300      ?
执行p=&s.a后
p     300      200
执行p[1]=2;p[0]=1;后
s.a   200    1
s.b   204    2
p      300    200
执行s.b=p;后
s.a   200    1
s.b   204    200
p      300    200
执行s.b[1]=4;后
s.a   200    1
s.b   204    4
执行s.b[0]=3;时,相当于*(s.b+0)=3,相当于修改地址为4的内存中的值等于3,超出
访问范围
2010-01-29 13:46
快速回复:求助 指针和结构体的混合使用
数据加载中...
 
   



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

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