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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言趣味教程】typedef 真爽不爽不要玩 | 初识结构体

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言趣味教程】typedef 真爽不爽不要玩 | 初识结构体 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:

本篇文章是一次大膽的嘗試,我想試著改變我那枯燥不堪的文筆,試著能不能幽默風趣地講解知識點。如果效果好的話,我會進一步嘗試!希望大家喜歡!


?學習結(jié)構(gòu)體之前,我們先來講講??非常 🐂🍺? 的 typedef 函數(shù)!

一、typedef 函數(shù)

0x00 函數(shù)介紹

?簡單來說,typedef 可以將一個數(shù)據(jù)類型重命名,使用方法如下:?

? 額……那它有什么用呢?我們來看下面的例子:

?吐槽:unsigned char 真是又臭又長,用得讓我很不爽!我真是受夠了!使用 typedef ,你就可以給 unsigned char 取新的名字,不要998,只要學會它!就能給這個數(shù)據(jù)類型取名!你還在等什么?趕快來學吧!

💬 舉個例子:將 unsigned char 重命名為 u_char

typedef unsigned char u_char;👆 👆 👆關(guān)鍵字 數(shù)據(jù)類型 新名字

這樣一來,我們就可以用 u_char 來取代又臭又長unsigned char 了!

unsigned char c; u_char c;

? 值得注意的是!typedef 的影響是有范圍限制的,只能在它所處的大括號內(nèi)使用,也就是出了作用域就會嗝屁。如果你想全局使用,可以在?#include?頭文件包含下面就定義 typedef,這樣它就有了?主角光環(huán)?!就不會這么輕易的狗帶了!如下所示:

#include <stdio.h> #include <stdlib.h>typedef char* String; //我是帶有主角光環(huán)的typedef ?int my_strlen(String str) {int i, cnt = 0;for(i = 0; str[i] != '\0'; i++) {cnt++;}return cnt; }int main(void) {String s = (String)malloc(sizeof(char) * 10); //還能進行強制類型轉(zhuǎn)換printf("Enter String: ");scanf("%[^\n]", s);free(s); // s: 我免費了!return 0; }

這么一來,typedef 就可以全局使用了。你學費了嗎?親手敲一敲試試看!

二、初識結(jié)構(gòu)體

0x00 結(jié)構(gòu)體是個什么玩意

?結(jié)構(gòu)體是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個成員以是不同類型的變量。

如果說數(shù)組是同一類型的變量集合,那么結(jié)構(gòu)體就是各種各樣變量的集合。因為結(jié)構(gòu)體支持所有C數(shù)據(jù)類型,所以結(jié)構(gòu)體內(nèi)部也可以有數(shù)組存在。

💬 舉個栗子,如果要保存學生的信息(學號,姓名,年級),想將信息捆綁在一起,作為一個變量來管理會十分便利。像這樣把多個數(shù)據(jù)類型捆綁在一起的,就叫做結(jié)構(gòu)體。

0x01 聲明結(jié)構(gòu)體

?💬 上述舉的例子(保存學生信息):

struct {int id;char name[26];double gradePoints; } student;

但是,對于有多個學生的情況,需要多個這樣的變量。考慮到每次都是用 struct {} 語法來產(chǎn)生變量的方法未免過于繁瑣,C語言允許將結(jié)構(gòu)體當作一個數(shù)據(jù)類型來方便我們更好地使用。如下所示,

ps:tag 表示?結(jié)構(gòu)體標簽

struct tag {type1 fieldName1;...typeN fieldNameN; }; struct tag variable_identifier1; struct tag variable_identifier2; struct student{ int id; char name[26]; float grade; }; struct student xiaoming; struct student xiaohong;

綜上所述得出總結(jié):結(jié)構(gòu)體是用戶自定義的類型 (user-defined type) 。

0x02 結(jié)構(gòu)體初始化

下面將演示結(jié)構(gòu)體變量聲明后初始化的過程:

💬?聲明變量時允許指定初始值:

為了接近結(jié)構(gòu)體的變量,我們可以使用 "點操作符(·)" 來獲取它。值得一提的是,字符串復(fù)制時要使用 strcpy。

0x01 結(jié)構(gòu)體與 typedef

📚 當然,typedef 還可以作用于結(jié)構(gòu)體。這樣可以讓結(jié)構(gòu)體用起來更爽,而不用拖著 struct name 又臭又長的玩意來定義變量,使用方法如下:

💬 之前舉的學生結(jié)構(gòu)體的例子,我們現(xiàn)在可以升級一下了:

💩 使用 typedef

struct student {int id;char name[26];float grade; };struct student xiaohong;

? 使用 typedef 后:

typedef struct {int id;char name[26];float grade; } stu;stu xiaohong;

?簡直是爽炸了有木有!不爽不要玩!

0x02 定義結(jié)構(gòu)體的方法

① 匿名定義

簡直是莽夫行為,莽就完事了!直接拿來就用,名字都懶得取了!

struct {... } var;

😂 開玩笑開玩笑,這其實是傳說中的 "匿名結(jié)構(gòu)體"?

?📚 匿名結(jié)構(gòu)體:在聲明結(jié)構(gòu)的時候,可以不完全聲明。匿名結(jié)構(gòu)體在聲明時省略掉結(jié)構(gòu)體標簽(tag),因為沒有結(jié)構(gòu)體標簽導(dǎo)致無法構(gòu)成類型,所以匿名結(jié)構(gòu)體自然只能用一次。

💬 匿名結(jié)構(gòu)體使用方法演示:

struct {int a;char b;float c;double d; } s;struct {int a;char b;float c;double d; } *ps;

②?tag 定義(結(jié)構(gòu)體標簽)

非常常見的定義結(jié)構(gòu)的方式

struct tag {... } var;struct tag var;

typedef 定義

?非常爽的定義方式,定義完之后用起來更加得心應(yīng)手!

typedef struct {... } test;test var;

當然,如果你怕你忘了 test 是個啥,你也可以加上 tag?tag 多長都沒事,反正你用?typedef 了。

typedef struct This_is_a_test {... } test;test var;

0x03 結(jié)構(gòu)體訪問

📚 結(jié)構(gòu)體變量間也可以使用賦值操作符的。但是!只有是同一結(jié)構(gòu)體類型時才能使用。

??通俗點說,想要結(jié)構(gòu)體變量間賦值,它們得是同一個媽生的才行。

💬 例子:

#include <stdio.h>int main(void) {typedef struct {int year;int month;int day;} birthday;birthday A = {2000, 4, 12};birthday B = {2002, 7, 9};printf("A的生日: %d年%d月%d日\n", A.year, A.month, A.day);printf("B的生日: %d年%d月%d日\n", B.year, B.month, B.day);// 賦值A(chǔ) = B;printf("A <- B 復(fù)制后:\n");printf("A的生日: %d年%d月%d日\n", A.year, A.month, A.day);printf("B的生日: %d年%d月%d日\n", B.year, B.month, B.day);return 0; }

🚩 運行結(jié)果:


?好了!我們點到為止,這一篇只是開個頭,下一篇我將會繼續(xù)講解結(jié)構(gòu)體!

總結(jié)

以上是生活随笔為你收集整理的【C语言趣味教程】typedef 真爽不爽不要玩 | 初识结构体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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