| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 908 人关注过本帖
标题:关于结构体的一些思考
取消只看楼主 加入收藏
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
 问题点数:0 回复次数:7 
关于结构体的一些思考
先看下面的一个例子:
#include<stdio.h>
typedef struct student stu;
typedef struct book boo;
struct student{
    int age;
    boo b;
}
struct book{
    char name[10];
}
main(){
......
}
运行程序会提示,在用结构体book之前必须先定义这个结构体。
如果把程序改写成下面的一种形式:
#include<stdio.h>
typedef struct student stu;
typedef struct book boo;
struct student{
    int age;
    boo *b;
}
struct book{
    char name[10];
}
main(){
......
}
再次运行这个程序不再提示任何异常,唯一修改的地方由原先的结构体变量变成了指针变量;

以下是我个人分析的结果,有什么不对的地方,麻烦各位大神给指点指点,我是学习java的刚开始准备了解了解c语言:
1。c语言是面向过程的语言,在第一个程序中,当解析到boo b;这行代码时,他不知道该为这个结构体变量分配多大的存储空间,book这个结构体是在student结构体下面定义的,所以会抛出异常,如果用结构体的指针变量的话,就不一样了,在c语言中,指针变量的存储空间都是4个字节,当解析到book *b这句话时,编译器就可以为*p这个指针变量分配四个字节的空间,所以程序能够正常运行。
2。所以在用结构体实现链表的数据结构的时候,对自身结构体的引用都是靠指针变量来实现的,如:
struct student{
    int age;
    struct student *s;
}

由于是第一次在编程论坛上发帖,有什么不足的地方还望各位大神不吝赐教,我的QQ号:2621933104 有兴趣一起学习交流c语言的可以加这个QQ号,期待你的加入,谢谢!
搜索更多相关主题的帖子: 运行程序 include 结构体 
2013-04-26 09:34
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 2楼 TonyDeng
我已经试过了,就是这种结果,你说的很对,程序是给人看的,如果对编译器如果运行的一点不去了解的话,对很多问题你只知道应该怎么用,而不知道为什么这样
2013-04-26 09:43
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 4楼 TonyDeng
不好意思,刚学c语言没多久,我还是不太明白你的意思,能否写一段程序来说明一下,求赐教,非常感谢
2013-04-26 09:50
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 6楼 TonyDeng
#include<stdio.h>
typedef struct student a;
struct student{
    int code;
    int age;
    a *e;
} stu1={1,2,NULL};


main(){
    stu1.code=3;
    printf("%d  %d",stu1.code,stu1.age,stu1.e);
   
}
这样测试行不行,我运行了一下,程序并没有崩溃,你说的是哪种情况会崩溃,麻烦你了
2013-04-26 10:03
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 8楼 TonyDeng
#include<stdio.h>
typedef struct book boo;

struct book{
    char *name;
    int number;
} book1={"wo",15};

main(){
    printf(" %s",book1.number);
   
}
这个程序运行,确实崩溃,麻烦问一下为什么会出现这种情况,非常感谢
2013-04-26 10:20
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
#include<stdio.h>


struct book{
    int number;
    char *name;
} book1={15,"woshi"};

main(){
    printf("%d %s",book1.number,book1.name);   
}
 上一次发的程序printf语句中的打印类型出错了,你说的很对定义一个指针,必须给他分配空间才能用,我觉得在book1初始化的时候,“woshi”字符串的首地址就会自动赋值给name指针变量,我试了试这样写程序能正常运行,是不是我理解的还有误  
2013-04-26 11:01
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 10楼 TonyDeng
#include<stdio.h>


struct book{
    int number;
    char *name;
} book1={15,"woshi"};

main(){
    printf("%d %s",book1.number,book1.name);   
}
 上一次发的程序printf语句中的打印类型出错了,你说的很对定义一个指针,必须给他分配空间才能用,我觉得在book1初始化的时候,“woshi”字符串的首地址就会自动赋值给name指针变量,我试了试这样写程序能正常运行,是不是我理解的还有误  
2013-04-26 11:01
zhuwenkai
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2013-4-26
收藏
得分:0 
回复 11楼 lz1091914999
非常感谢
2013-04-26 11:02
快速回复:关于结构体的一些思考
数据加载中...
 
   



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

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