日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【学习笔记】【C语言】结构体

發(fā)布時(shí)間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】【C语言】结构体 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.定義結(jié)構(gòu)體變量的3種方式
?1> 先定義類型,再定義變量(分開定義)
?struct Student
?{
??? int age;
?};
?struct Student stu;
?
?2> 定義類型的同時(shí)定義變量
?struct Student
?{
??? int age;
?} stu;
?struct Student stu2;
?
?3> 定義類型的同時(shí)定義變量(省略了類型名稱)
?struct
?{
??? int age;
?} stu;
?
?2.結(jié)構(gòu)體類型的作用域
?1> 定義在函數(shù)外面:全局有效(從定義類型的那行開始,一直到文件結(jié)尾)
?2> 定義在函數(shù)(代碼塊)內(nèi)部:局部有效(從定義類型的那行開始,一直到代碼塊結(jié)束)

?3.代碼

?1>結(jié)構(gòu)體

1 /* 2 數(shù)組:只能由多個(gè)相同類型的數(shù)據(jù)構(gòu)成 3 4 結(jié)構(gòu)體:可以由多個(gè)不同類型的數(shù)據(jù)構(gòu)成 5 */ 6 #include <stdio.h> 7 8 int main() 9 { 10 //int ages[3] = {[2] = 10, 11, 27}; 11 12 13 //int ages[3] = {10, 11, 29}; 14 15 // 1.定義結(jié)構(gòu)體類型 16 struct Person 17 { // 里面的3個(gè)變量,可以稱為是結(jié)構(gòu)體的成員或者屬性 18 int age; // 年齡 19 double height; // 身高 20 char *name; // 姓名 21 }; 22 23 // 2.根據(jù)結(jié)構(gòu)體類型,定義結(jié)構(gòu)體變量 24 struct Person p = {20, 1.55, "jack"}; 25 p.age = 30; 26 p.name = "rose"; 27 28 printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height); 29 30 /* 錯(cuò)誤寫法 31 struct Person p2; 32 p2 = {30, 1.67, "jake"}; 33 */ 34 35 struct Person p2 = {.height = 1.78, .name="jim", .age=30}; 36 //p2.age = 25; 37 38 return 0; 39 }

?2>結(jié)構(gòu)體內(nèi)存分析

1 #include <stdio.h> 2 int main() 3 { 4 5 6 return 0; 7 } 8 9 // 補(bǔ)齊算法 10 void test1() 11 { 12 struct Student 13 { 14 int age;// 4個(gè)字節(jié) 15 16 char a; 17 18 //char *name; // 8個(gè)字節(jié) 19 }; 20 21 struct Student stu; 22 //stu.age = 20; 23 //stu.name = "jack"; 24 // 補(bǔ)齊算法(對齊算法) 25 // 結(jié)構(gòu)體所占用的存儲空間 必須是 最大成員字節(jié)數(shù)的倍數(shù) 26 27 int s = sizeof(stu); 28 printf("%d\n", s); 29 } 30 31 // 結(jié)構(gòu)體內(nèi)存細(xì)節(jié) 32 void test() 33 { 34 // 1.定義結(jié)構(gòu)體類型(并不會(huì)分配存儲空間) 35 struct Date 36 { 37 int year; 38 int month; 39 int day; 40 }; 41 42 // 2.定義結(jié)構(gòu)體變量(真正分配存儲空間) 43 struct Date d1 = {2011, 4, 10}; 44 45 46 struct Date d2 = {2012, 8, 9}; 47 48 // 會(huì)將d1所有成員的值對應(yīng)地賦值給d2的所有成員 49 d2 = d1; 50 d2.year = 2010; 51 52 printf("%d - %d - %d\n", d1.year, d1.month, d1.day); 53 54 printf("%d - %d - %d\n", d2.year, d2.month, d2.day); 55 /* 56 printf("%p - %p - %p\n", &d1.year, &d1.month, &d1.day); 57 58 int s = sizeof(d1); 59 printf("%d\n", s); 60 61 */ 62 }

3>注意點(diǎn)

1 #include <stdio.h> 2 // 從這行開始,一直到文件結(jié)尾,都是有效(跟全局變量一樣) 3 struct Date 4 { 5 int year; 6 int month; 7 int day; 8 }; 9 10 int a; 11 12 void test2() 13 { 14 struct Date 15 { 16 int year; 17 }; 18 // 這里使用的是test2函數(shù)內(nèi)部的struct Date類型 19 struct Date d1 = {2011}; 20 21 22 // 結(jié)構(gòu)體類型也是有作用域,從定義類型的那一行開始,一直到代碼塊結(jié)束 23 struct Person 24 { 25 int age; 26 }; 27 28 struct Person p; 29 30 a = 10; 31 } 32 33 int main() 34 { 35 struct Date d1 = {2009, 8, 9}; 36 37 38 test2(); 39 40 // 不能使用test2函數(shù)中定義的類型 41 // struct Person p2; 42 43 return 0; 44 } 45 46 // 定義結(jié)構(gòu)體變量 47 void test() 48 { 49 // 定義結(jié)構(gòu)體變量的第3種方式 50 struct { 51 int age; 52 char *name; 53 } stu; 54 55 struct { 56 int age; 57 char *name; 58 } stu2; 59 60 61 /*結(jié)構(gòu)體類型不能重復(fù)定義 62 struct Student 63 { 64 int age; 65 }; 66 67 struct Student 68 { 69 double height; 70 }; 71 72 struct Student stu; 73 */ 74 75 /* 錯(cuò)誤寫法:結(jié)構(gòu)體類型重復(fù)定義 76 struct Student 77 { 78 int age; 79 double height; 80 char *name; 81 } stu; 82 83 struct Student 84 { 85 int age; 86 double height; 87 char *name; 88 } stu2;c 89 */ 90 91 /* 92 這句代碼做了兩件事情 93 1.定義結(jié)構(gòu)體類型 94 2.利用新定義好的類型來定義結(jié)構(gòu)體變量 95 */ 96 // 定義變量的第2種方式:定義類型的同時(shí)定義變量 97 /* 98 struct Student 99 { 100 int age; 101 double height; 102 char *name; 103 } stu; 104 105 struct Student stu2; 106 */ 107 108 /* 109 // 定義變量的第1種方式: 110 // 1.類型 111 struct Student 112 { 113 int age; 114 double height; 115 char *name; 116 }; 117 118 // 2.變量 119 struct Student stu = {20, 1.78, "jack"}; 120 */ 121 }

?4>結(jié)構(gòu)體數(shù)組

1 int main() 2 { 3 struct RankRecord 4 { 5 int no; // 序號 4 6 int score; // 積分 4 7 char *name; // 名稱 8 8 }; 9 /* 10 struct RankRecord r1 = {1, "jack", 5000}; 11 struct RankRecord r2 = {2, "jim", 500}; 12 struct RankRecord r3 = {3, "jake",300}; 13 */ 14 15 //int ages[3] = {10, 19, 29}; 16 17 //int ages[3]; 18 // 對齊算法 19 // 能存放3個(gè)結(jié)構(gòu)體變量,每個(gè)結(jié)構(gòu)體變量占16個(gè)字節(jié) 20 // 72 21 /* 22 int no; // 序號 4 23 char *name; // 名稱 8 24 int score; // 積分 4 25 */ 26 // 48 27 /* 28 int no; // 序號 4 29 int score; // 積分 4 30 char *name; // 名稱 8 31 */ 32 struct RankRecord records[3] = 33 { 34 {1, "jack", 5000}, 35 36 {2, "jim", 500}, 37 38 {3, "jake",300} 39 }; 40 41 records[0].no = 4; 42 // 錯(cuò)誤寫法 43 //records[0] = {4, "rose", 9000}; 44 45 for (int i = 0; i<3; i++) 46 { 47 printf("%d\t%s\t%d\n", records[i].no, records[i].name, records[i].score); 48 } 49 50 //printf("%d\n", sizeof(records)); 51 52 53 return 0; 54 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/dssf/p/4604847.html

總結(jié)

以上是生活随笔為你收集整理的【学习笔记】【C语言】结构体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。