C語(yǔ)言中結(jié)構(gòu)體實(shí)例解析
一.結(jié)構(gòu)體定義
C語(yǔ)言結(jié)構(gòu)體由一系列相同或者不同類(lèi)型的數(shù)據(jù)構(gòu)成的集合,結(jié)構(gòu)體類(lèi)型就是以struct關(guān)鍵字定義的數(shù)據(jù)類(lèi)型。
結(jié)構(gòu)體的格式如下:
struct 結(jié)構(gòu)名稱(chēng) { 結(jié)構(gòu)體所包含的數(shù)據(jù)成員,包括變量數(shù)組等 } 結(jié)構(gòu)變量 ;//結(jié)構(gòu)變量可以指定一個(gè)或多個(gè)
舉例:
struct Student { char name[10]; char sex[2]; int age; }Stu
二.實(shí)例演示
先看下結(jié)構(gòu)體變量如何初始化
#include <stdio.h> #include <string.h> struct Student { char name[10]; char sex[5]; int age; }Stu = {"Mike","man",22}; int main(int argc, char *argv[]) { printf("name:%s\nsex:%s\nage:%d\n",Stu.name,Stu.sex,Stu.age); }
初始化結(jié)構(gòu)體變量很簡(jiǎn)單,直接在結(jié)構(gòu)體變量后面賦值。
結(jié)果:
結(jié)構(gòu)體作為函數(shù)參數(shù)
#include <stdio.h> #include <string.h> //定義Student結(jié)構(gòu)體 struct Student { char name[10]; char sex[5]; int age; }Stu; void print(struct Student stu) { printf("Student name:%s\n",stu.name); printf("Student sex:%s\n",stu.sex); printf("Student age:%d\n",stu.age); } int main(int argc, char *argv[]) { struct Student stu1; strcpy(stu1.name,"will"); strcpy(stu1.sex,"man"); stu1.age = 20; print(stu1); //Stu Stu.age=11; print(Stu); }
從這個(gè)示例可以看出:將結(jié)構(gòu)體作為參數(shù)傳入函數(shù),定義結(jié)構(gòu)體時(shí),我們可以在;前面定義結(jié)構(gòu)體變量, 這樣就不需要再定義結(jié)構(gòu)變量,如:struct Student stu1;假設(shè)stu1在定義結(jié)構(gòu)體時(shí)就定義變量,那么就可以直接賦值。
結(jié)果:
可以看出第二個(gè)學(xué)生打印,因?yàn)樵诙x結(jié)構(gòu)體時(shí)就已經(jīng)定義結(jié)構(gòu)變量,所以可以直接賦值。
結(jié)構(gòu)體指針
實(shí)例演示,傳入結(jié)構(gòu)體指針
#include <stdio.h> #include <string.h> struct Student { char name[10]; char sex[5]; int age; }Stu; void print(struct Student *stu) { printf("Student name:%s\n",stu->name); printf("Student sex:%s\n",stu->sex); printf("Student age:%d\n",stu->age); } int main(int argc, char *argv[]) { struct Student stu1; strcpy(stu1.name,"will"); strcpy(stu1.sex,"man"); stu1.age = 20; print(&stu1); Stu.age=11; print(&Stu); }
這里的實(shí)例和上面例子的區(qū)別主要是:
1.將定義的變量改為指針struct Student *stu。
2.指針賦值時(shí)使用->。
3.使用打印函數(shù)時(shí),改為取地址。
結(jié)果一致
三.typedef struct 和 struct的區(qū)別
1、聲明不同
1)、struct:struct可以直接使用結(jié)構(gòu)體名字聲明結(jié)構(gòu)體。
2)、typedef struct:typedef struct為修飾結(jié)構(gòu)體,結(jié)構(gòu)體有了別名,通過(guò)結(jié)構(gòu)體別名聲明結(jié)構(gòu)體。
2、訪問(wèn)成員變量不同
1)、struct:struct定義的結(jié)構(gòu)體變量,可直接訪問(wèn)結(jié)構(gòu)體成員。
2)、typedef struct:typedef struct定義的結(jié)構(gòu)體變量,不可直接訪問(wèn)結(jié)構(gòu)體成員,必須顯式的通過(guò)結(jié)構(gòu)體變量來(lái)訪問(wèn)成員。
3、重新定義不同
1)、struct:想重新定義struct結(jié)構(gòu)體的話,必須重寫(xiě)整個(gè)結(jié)構(gòu)體。
2)、typedef struct:想重新定義typedef struct結(jié)構(gòu)體的話,可以通過(guò)別名來(lái)繼承結(jié)構(gòu)體進(jìn)行重新定義。
舉例:
可以看到:
使用typedef struct定義的結(jié)構(gòu)體,我們通常是使用別名進(jìn)行操作,而且在使用時(shí)也簡(jiǎn)化了使用方法,例如:Stu s1,相當(dāng)于聲明對(duì)象一樣,如果使用struct,那么就要寫(xiě)成struct Student stu1;。
如果直接使用結(jié)構(gòu)體名稱(chēng)那么會(huì)報(bào)錯(cuò):
錯(cuò)誤示例:
報(bào)錯(cuò)結(jié)果:
改回別名操作,結(jié)果:
總結(jié)
到此這篇關(guān)于C語(yǔ)言中結(jié)構(gòu)體實(shí)例解析的文章就介紹到這了,更多相關(guān)C語(yǔ)言結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++ Qt 數(shù)據(jù)庫(kù)與Chart歷史數(shù)據(jù)展示
這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫(kù)中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學(xué)習(xí)和工作價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12C++實(shí)現(xiàn)LeetCode(75.顏色排序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(75.顏色排序),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07用代碼和UML圖化解設(shè)計(jì)模式之橋接模式的深入分析
本篇文章是對(duì)橋接模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11