网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月06日
漏签
0
天
c语言吧
关注:
801,844
贴子:
4,376,784
看贴
图片
吧主推荐
视频
游戏
14
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
本人初学,自学阶段发以技术贴来拜山!
只看楼主
收藏
回复
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一楼喂度娘。
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
众所周知,C中的基本数据类型分整型,字符,浮点,布尔这四类,新手用的较多的也就int,char,float,double,bool这么几个,但是在进一步程序设计中,这些单一的类型开始展现其局限性,这时候,结构体这类派生类型就显得方便而有必要了.
举个简单的例子,一个学生信息管理系统,学生的数据,包括姓名,性别,年龄,学号这些,用单一的变量分开存放就失去了这些数据的意义,用字符数组存放貌似是个可行的方案,然而二维数组存放的数据意义不大,统一为字符串的数据也失去了比较的意义,C的灵活性也大打折扣.如何保持每个数据精确度的同时保证操作的方便灵活,C提供了结构体这一种由用户自定义的数据类型.
2026-03-06 07:47:25
广告
不感兴趣
开通SVIP免广告
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为了定义一个结构体变量,首先建立一个结构体变量类型,这里需要用到struct关键字,同时可以有一个结构名区分,接下来就需要声明结构体成员类型和成员名.定义的时候可以同时定义结构体变量名.
struct string
{
charname[8]; //定义成员变量
intage;
charsex[2];
chardepart[20];
floatwage1, wage2, wage3, wage4, wage5;
}; //这里分号必不可少
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
在上面的定义中,struct string可以视为和int一样的数据类型,{}里面是对structstring的成员的定义,定义完成后需要用分号表示语句的结束.在结构体定义之后,就可以将struct 结构体名视为一个整体来进行尽情使用,和int等基本类型一样,可以定义变量,指针,数组,也可用于其他结构体的定义.在结构体定义时也可同时定义结构体变量或指针,在}后面,以逗号隔开,以分号结束.
struct string
{
//定义成员变量
}A,*B; //同时定义结构体变量和结构体指针
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
由于后续每次定义或使用都需要以struct加结构体名的结构过于繁琐,这里有两个常用的方法可以处理这个问题.方法一是使用#define宏定义,这种方法也是最适合小白的,简单易学不容易出错,语句为#define Stu struct string;方法二需要用到一个新的关键字,C中用来定义别名的typedef,格式为typedefstruct string Stu;以上都是以Stu作为struct string的别名,以后的定义结构体变量就可以Stu A,B,*p;这种形式.typedef可以在结构体定义后单独成行,也可以在结构体定义同时声明.
typedef struct string
{
//定义成员变量
}Stu,a,b; //这里Stu,a,b都是struct string别名
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
在这里需要注意的一点是typedfstruct string{}*pStu;这样的定义方式,pStu可用作一种新的数据类型(而非*pStu);定义的变量为struct string类型的指针.另外,在一份结构体定义中结构体名可以省略,但是代价是不能在后续中定义新的结构体变量,但是可以使用typedef给别名的方式来重新指定这个数据类型.
typedef struct
{
//定义成员变量
}Stu;
Stu a,b;
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
最后的赋值部分,结构体变量的赋值,可以像数组一样整体赋值,对应类型和数量,用花括号括起来,字符用’ ’,字符串用” ”,之间用逗号隔开这种方法只可以在定义结构体的时候定义变量是能够使用.另外一种方法就是运用点号获取结构体成员逐一赋值.
struct stu{
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
} stu1, stu2 = { "Tom", 10, 'M', 90 }; //整体赋值只限于这种情况
stu1.name = "Tom"; 结构体变量成员使用
Stu1.score = 90.5;
stu2 = { "Tom", 10, 'M', 90 }; //这样是错误的
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
结构体在定义后可以视为一种新的数据类型,因此可以用于其他结构体的成员变量之中.结构体内部若包含结构体变量,便可称之为结构体的嵌套.结构体嵌套有两种形式需要特别注意,自引用和相互引用,其中自引用有且仅有结构体指针可作为自引用的对象.以下三种自引用方式是合法的.
typedef struct tag_1{ int value; struct tag_1 *link; } NODE; struct tag_2;typedef struct tag_2 NODE;struct tag_2{ int value; NODE *link; }; struct tag_3{ int value; struct tag_3 *link; };typedef struct tag_3 NODE;
2026-03-06 07:41:25
广告
不感兴趣
开通SVIP免广告
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
结构体相互引用也只能引用指针类型而不能引用实例,否则会报错,只有以下两种定义是合法的.
struct tag_a{ struct tag_b *bp; int value;};struct tag_b{ struct tag_a *ap; int value;};typedef struct tag_a A;typedef struct tag_b B; struct tag_a; struct tag_b;typedef struct tag_a A;typedef struct tag_b B;struct tag_a{ struct tag_b *bp; int value;};struct tag_b{ struct tag_a *ap; int value;};
丶Mople
超能力者
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不知道你看的什么渣渣书,先鄙视一下这本书,首先派生是面向对象里面的东西,在C语言中没有这样的叫法,C语言中数据类型分为四种,基本类型,构造类型,指针类型,空类型。另外布尔类型是C99标准才有的,而除了一些主流的编译器外还有很多编译器并不支持C99,所以这种说法并不严谨
fdj070243
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
初学指正得很对
kcjby
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这难道不是C++,搞错了吧
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示