C语言-结构体

在现实生活中,一组数据往往具有很多种类型的数据。例如,学生登记表,它里面包含了姓名、学号、成绩、班级等等,而这些元素的数据类型分别为字符、整型、浮点型等等。显而易见,这些数据是不能放在同一个数组当中的,因为数组中的各元素必须是同种类型的数据,且长度保持一致。因此,为了解决这一问题,C语言中给出了另一种构造数据类型——“structure(结构)”,又称之为结构体。它相当于一种高级的数据构造类型,它可以是有两个或两个以上成员组成。

1. 一般形式:

struct 结构体名
{
    成员列表;
};

2. 结构体类型变量的定义

结构体类型变量的定义有三种形式:

1.先定义结构,后定义变量:

struct stu
{
    char name[20];
    char sex;
    float score;
};
struct stu boy,girl;

2.用宏定义结构类型:

#define STU struct stu
struct stu
{
    char name[20];
    char sex;
    float score;
};
struct stu boy,girl;

3.在定义结构类型的同时说明变量:

struct stu
{
    char name[20];
    char sex;
    float score;
}boy,girl;

3. 结构变量的表示方法

一般形式:

结构变量名.成员名
boy.name  // 男孩的名字
girl.score  // 女孩的成绩

若成员本身也是一个结构体,则必须找到最低级的数据类型才可以,例如:girl.brithday.month。

4. 结构体变量的赋值

结构体变量的赋值就是给其成员赋值。可用输入语句或者赋值语句来完成对结构体变量的赋值。

// 案例1:
#include <stdio.h>
#include <string.h>
int main()
{
    struct person  
    {
      char name[10];
      char sex;
      int height;
    };
    p.height=120;
    p.sex='m';
    strcpy(p.name,"xxx");
    printf ("{%s-%c-%d}\n",p.name,p.sex,p.height); // 先定义,后赋值
    struct person p1={"kkk",'f',150};
    printf ("{%s-%c-%d}\n",p1.name,p1.sex,p1.height); // 第二种赋值方法
    struct person p2=p1;  // 将p1里面的值赋值给p2
    printf ("{%s-%c-%d}\n",p2.name,p2.sex,p2.height); // 第三种赋值方法
    return 0;
}

5. 结构数组的定义

数组的元素可以为int、float等等,同样元素也可以是结构体类型的,故有结构体数组。

struct stu
{
    char name[20];
    char sex;
    float score;
}boy[5];
boy[5]={
    {"ch","man",60};
    {"er","women",80};
    {"hh","man",90};
    {"jj","man",100};
    {"oo","women",59};
}

注释:定义stu类型数组boy[5],共有5个元素,从boy[0]~boy[4]。且每组数据都是stu类型的,且可以对该数组进行初始化。

6. 指向结构变量的指针

定义结构指针的一般形式:
struct 结构名 *结构指针变量

例如:struct stu *pstudent;
// *pstudent 是结构类型stu的指针;

访问的一般形式:

(*结构指针变量).成员名
或者为
结构指针变量->成员名
(*pstudent).name
or:
pstudent->name
// 注意:(*pstudent)两边的括号不能少,因为成员符号“.”的优先级高于“*”。

7. 结构类型定义符typedef

typedef用于给数据类型取“别名”。

int a,b;
// 也可以写为如下形式:
typedef int INTEGER
INTEGER a,b;

若用typedef 定义数组、指针、结构类型将会很方便,不仅使程序书写简单,且使意义更加明确,同时也增强了可读性。
一般形式:
typedef 原类型名 新类型名;

8.计算结构体长度规则

内存字节对齐原则(求字节数):

  1. 如果结构体里面所有的成员变量(成员属性)都是基本数据类型(int、char、float、double),那么第一个成员变量从内存地址偏移量为零开始计数,后面的成员变量从内存地址偏移量是本身所占字节大小的最小倍数开始分配。
  2. 如果结构体里面的成员变量不是基本数据类型,比如:int arr[10];那么,这个数组成员变量从内存地址偏移量是这个数组本身里面的元素的最大字节数的倍数开始分配。
  3. 最后收尾的时候,所占字节数要是最大成员变量的最小倍数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 语言------结构体 枚举学习,有需要的朋友可以参考下。 结构体 枚举 1.局部变量: >定义.在代码块内部定...
    朱森阅读 920评论 0 0
  • 结构体: 1,基本定义: 成员列表:有基本数据类型定义的变量或者构造类型的变量example: struct st...
    酸菜牛肉阅读 1,580评论 0 0
  • 谨记 什么是价值?或许没有多少人能够明白,其实价值并不是实际存在的,它应该是一种体现,比如为城市点缀最美好的一面而...
    长风留言阅读 2,395评论 0 15
  • 结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。...
    超级小江阅读 2,397评论 0 7
  • 如果初恋就代表着对爱情无知不懂事,那我很想离开你,去多谈几场恋爱,去多了解男人。可惜,离了你,我不相信自己...
    苏丹的旋律阅读 241评论 0 0