C语言中的结构体

结构体:一种自己设计的全新数据类型,没有方法的类

  • 如果没有选择使用标记名(emplopee),那么只能在定义时声明
  • 在声明时编译器不为结构保留任何内存空间,而是建立了用于声明变量的一种新的数据类型
  • 如果初始化的值的个数小于结构体中的成员数目,剩下的初始化为0(指针为NULL
  • 可以使用同种类型的其他结构变量进行赋值(必须要相同类型)
/* 声明一种新类型: employee*/
struct employee {
    char name[50]; 
    int age; 
    float salary; 
}; //别忘记‘;’

struct employee x;          //声明emplyee结构体类型的变量
x = {"Simon", 18, 200}; //初始化


访问结构体的成员变量

  • .是直接访问,而不是指针(结构体在内存中连续存储)
struct employee x, y;

strcpy(x . name, "Norma Baker"); 
x.age = 34; 
scanf("%f", &x.salary);

strcpy(y.name, "Robert Smith"); 
y.age = x.age + 5; 
y.salary = 0.90 * x.salary;


结构体数组

struct employee {
    char name[25]; 
    int age; 
    float salary; 
}; 
struct employee toy_dept[100];

//访问数组元素
toy_dept[i].salary = 70000.0; 
strcpy(toy_dept[i].name, "Adam Smith"); 
scanf ("%d", &toy_dept[i].age);


结构体作为函数参数

struct Books { 
    char title[50]; 
    char author[50]; 
} book;

/* function declaration */ 
void printBook( struct Books book );


结构体指针

struct Books { 
    char title[50]; 
    char author[50];
} book1; 

struct Books *struct_pointer; 
struct_pointer = &book1;

//直接访问
printf("Book title : %s\n", (*struct_pointer).title);
//通过指针访问
printf( "Book title : %s\n", struct_pointer->title);


结构体中的Union(联合)

  • 结构的各成员顺序排列存储,每个成员都有自己独立的存储位置,但Union变量的所有成员共享同片内存
  • Union变量每个时刻里只能保存它的某一个成员的值
enum fig_type { CIRCLE, RECTANGLE, TRIANGLE } ;
struct figure { 
    double area, perimeter; //都有的属性
    perimeter; 
    enum fig_type ins; 
    union { 
        double radius;          //圆特有的属性
        double a[2];                //矩形特有的属性
        double b[3];                //三角形特有的属性
        } param; 
} fig1, fig2 ;

fig1.param.a[] = {2.0,3.0}; 
fig2.param.radius = 2.0;


typedef

typedef double * MATH; /* MATH – doubel指针 */

typedef char NAME[50];  
NAME person; /* char person[50]; */


typedef struct employee EmpRec; /* EmpRec - employee结构体 */
EmpRec x, y;


内存中的存储

struct example {
    char c;
    int b;
} sample;
内存存储.png
  • 字长为两个字节的计算机可能会要求把sample的每一个成员从的边界开始存放(字:存储数据的标准内存单元),这个特性和机器有关
  • 可能会有空洞存在在内存中(空洞中的值不确定),图中有一个字节的空洞
  • 所以结构体不能比较大小(空洞存在)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容