C語言基礎(下)

2020-12-08 BitLegend
C語言的世界

結構體類型

什麼是結構體

我們觀察現實世界的時候,可以發現很多的東西它都是由不同的部分組合起來的。比如手機由電池、屏幕、晶片等很多個部分組成。同時對於一個電池它又是由很多的其他東西組成。結構體就是把這些東西組合在一起,進行統一的訪問和管理。可以理解成是對現實世界的抽象結構體不僅可以記錄不同類型的數據,而且使得數據結構是「高內聚,低耦合」的,更利於程序的閱讀理解和移植,而且結構體的存儲方式可以提高CPU對內存的訪問速度。

定義結構體

struct 數據類型名{//結構體數據成員列表};示例

struct Student{char * name;char * gender;char * mail;int age;};聲明結構體變量

方式一

struct Student student;方式二

struct Student {char name[10];char * gender;char * mail;int age;} stu;方式三

struct {char * name;char * gender;char * mail;int age;} stu;//之後無法再繼續定義變量結構體變量的初始化

結構體定義時初始化

struct Student{char name[10];char *gender;char *mail;int age;} student = {"泱澈", "男", "2633218009@qq.com", 21};變量定義時初始化

struct Student stu;// 此時需要進行類型轉換stu = (struct Student){"泱澈","男","2633218009@qq.com",21};//部分初始化struct Student stu = {.name = "泱澈"};單個進行賦值

//對數組類型的數據不能直接賦值 例如 stu.name = "泱澈";strcpy(stu.name,"泱澈"); stu.age = 21; stu.gender = "男";結構體變量的使用

我們使用 變量.成員欄位 來使用結構體的數據成員

strcpy(stu.name,"泱澈"); stu.age = 21; stu.gender = "男"; stu.mail = "2633218009@qq.com"; printf("%s\n", stu.name); printf("%s\n", stu.gender); printf("%s\n", stu.mail); printf("%d\n", stu.age);結構體數組

語法定義

struct Student{char * name;}stu[5];使用上與單個結構體變量相同,在數組中需要加上在數組中的下標

使用示例

#include <stdio.h>#include<string.h>struct Student{char * name;};int main(){struct Student stu[2];stu[0] = (struct Student){"泱澈"};printf("%s\n", stu[0].name);return 0;}結構體指針

指向結構體類型的指針

使用示例

#include <stdio.h>#include<string.h>struct Student{char * name;};int main(){struct Student stu = {"泱澈"};struct Student * p;p = &stu;printf("%s\n", (* p).name);printf("%s\n", p->name);return 0;}結構體嵌套

一個結構體當中可以包含其他類型的結構體,當中自身當中不能包含相同類型的結構體,但是可以包含執行自身的指針

使用示例

#include <stdio.h>#include<string.h>struct gender{char * ch;};struct Student{char * name;struct Student * s;struct gender gen;};int main(){struct gender gen = {"男"};struct Student stu = {"泱澈",NULL};struct Student student = {"泱澈",&stu,gen};printf("%s\n", student.name);printf("%s\n", (student.s)->name);printf("%s\n", student.gen.ch);return 0;}結構體變量在作為參數傳遞的時候使用的是值傳遞

typedef struct 與 struct 的區別

typedef 關鍵字可以將一種數據類型添加一種別名,例如 typedef int Int;此時Int 等價於 int。在stuck中,我們定義的別名可以直接用於定義變量,等價於 struct 類型名。

使用示例

#include <stdio.h>#include<string.h>struct gender{char * ch;};typedef struct Student{char * name;struct Student * s;struct gender gen;} Stu;int main(){struct gender gen = {"男"};struct Student stu = {"泱澈",NULL};struct Student student = {"泱澈",&stu,gen};//使用新定義的類型名 定義指針變量 等價於 struct StudentStu * s = &student;printf("%s\n", (*s).name);printf("%s\n", ((*s).s)->name);printf("%s\n", (*s).gen.ch);return 0;}enum 枚舉

什麼是枚舉

枚舉就是將我們數據可能存在的結果有限個的羅列出來。比如一個人的性別不是男就是女。不會出現其他的值。這個時候我們就可以使用枚舉來代表

語法示例

#include <stdio.h>#include<string.h>enum Gender{MAN = 1, //不指定值則從 0開始WOMAN = 2 //不指定值則從上一個定義的值開始遞增,為 2};int main(){//定義枚舉變量enum Gender g;//枚舉變量只可能存在一種值g = WOMAN;printf("%d\n",g);return 0;}union 共用體

什麼是共用體

共用體內部可以定義N個變量,但是這個N個變量之間會相互影響。共用體的所有成員佔用同一段內存,修改一個成員會影響其餘所有成員

語法示例

#include <stdio.h>#include<string.h>union Data{int a;char b;short c;};int main(){union Data d ;d.a = 46;printf("%d\n",d.a);printf("%c\n",d.b);printf("%d\n",d.c);printf("-----\n");d.b = 'a';printf("%d\n",d.a);printf("%c\n",d.b);printf("%d\n",d.c);printf("-----\n");d.c = 47;printf("%d\n",d.a);printf("%c\n",d.b);printf("%d\n",d.c);return 0;}/* 運行結果: 46 . 46 ----- 97 a 97 ----- 47 / 47*/以上就是本期的全部內容了,非常感謝你能看到這裡,我們下期見!

相關焦點

  • C語言基礎知識學習(二)
    函數C語言函數說明1. 一個C程序的基本結構包括預處理部分和函數部分;2. 函數是C語言的基本單位;3. C語言程序開始於主函數,結束於主函數;4. C語言中沒有輸入輸出語句但有輸入輸出函數.使用條件a) 可以把問題轉化為新問題,並且新問題解決方法與原問題的解決方案相同;b) 可以提高轉化過程,使問題得到解決;c) 必須有結束條件.2.
  • Linux下C語言編譯的問題
    在Linux下編程發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤:(.text+0x13): undefined reference to `func'  關於undefined reference這樣的問題
  • C語言基礎知識學習(四)
    C語言知識點補充關於'\0'與'0'與0與NULL(1)'\0'是字符串的結束標誌其ASCII值為0.在C語言中,NULL和0的值都是一樣的,NULL用於指針,0用於數值。對於字符串的結尾,使用'\0',它的值也是0,但是讓人一看就知道這是字符串的結尾,不是指針,也不是普通的數值.
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。; /*把兩個數之和賦值給整型變量sum*/ }重點說明—1、任何一個c語言程序都必須包括以下格式:main() { }——這是c語言的基本結構,任何一個程序都必須包含這個結構。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    第一個C語言編譯器是怎樣編寫的? 不知道你有沒有想過,大家都用C語言或基於C語言的語言來寫編譯器,那麼世界上第一個C語言編譯器又是怎麼編寫的呢?這不是一個「雞和蛋」的問題…… 回顧一下C語言歷史:Tomphson在BCPL的基礎上開發了B語言,Ritchie又在B語言的基礎上成功開發出了現在的C語言。
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • C語言全局變量那些事兒
    今天我們就來黑一把C語言,好好展示一下這門經典語言令人抓狂的一面。以下示例對ANSI C和GNU C標準都有效,筆者的編譯環境是Ubuntu下的GCC-4.4.3。C語言在你心目中是否還是當初那個「純潔」、「乾淨」、「行為一致」的姑娘呢?也許趁著你不注意的時候她會偷偷給你戴頂綠帽,這一切都是通過全局變量,特別在動態連結的環境下,就算全部定義成強符號仍然無法為編譯器所察覺。而一些IT界「恐怖分子」也經常將惡意代碼包裝成全局變量注入到root權限下存在漏洞的操作序列中,就像著名的棧溢出攻擊那樣。
  • c語言入門教程
    這本書被 C語言開發者們稱為"K&R",很多年來被當作 C語言的非正式的標準說明。人們稱這個版本的 C語言為"K&R C"。  c語言宣傳圖1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 入門C語言!
    也許有很多同學想學習C語言,卻不知道從什麼地方入手。或者有一些同學,學了一些基礎,太簡單的覺得枯燥無趣,有點複雜的又靜不下心來細細琢磨,也就是所謂的瓶頸時期,如果過了這個時期,C語言的學習就會順暢很多,高度也會大幅度提升。
  • 蘋果,安卓開發,手機app,C語言JAVA的關係
    首先,android開發,繞不開的就是JAVA編程,因為android的底層就是java,再底層就是C語言,可以這樣理解:java是一種程式語言,android應用用java開發,而c語言是另一種程式語言,也可以在android開發,但是需要通過java去調用C語言。
  • 世界上第一個C語言編譯器是怎麼編寫的?它為什麼能夠用C語言編寫?
    所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析,按照C語言的規則,將其轉換成cpu可以執行的二進位文件。這些操作,C語言都是可以實現的。 所以用C語言來做C語言的編譯器是完全可行的。 但是,歷史上的第一個C語言編譯器,肯定不是C語言寫的,因為在沒有編譯器時,無法把C語言轉換成可執行文件。只要有了第一版其它語言的編譯器,就可以用C語言寫編譯器了。
  • C語言項目中.h和.c文件的關係和概念
    在編譯器只認識.c(.cpp))文件,而不知道.h是何物的年代,那時的人們寫了很多的.c(.cpp)文件,漸漸地,人們發現在很多.c(.cpp)文件中的聲明語句就是相同的。
  • c語言經典小程序匯總大全
    當然,如果你覺得學習程式語言很痛苦,堅持了一段時間後無果,南無果斷放棄未必不是一個好的選擇。 經典C語言小程序10例,今天給大家分享10個比較基礎的C語言的小程序,附上幾個常用的10個小例,希望給C語言初學者帶來一定幫助,熟練運用,舉一反三。
  • C/C+編程筆記:C語言預處理命令是什麼?不要以為你直接寫#就行!
    C語言源文件要經過編譯、連結才能生成可執行程序: 1) 編譯(Compile)會將源文件(.c文件)轉換為目標文件。但是現在有個問題,程序中要實現的某個功能在 VS 和 GCC 下使用的函數不同(假設 VS 下使用 a(),GCC 下使用 b()),VS 下的函數在 GCC 下不能編譯通過,GCC 下的函數在 VS 下也不能編譯通過,怎麼辦呢?
  • C語言應用—簡易的計算器
    我們在此之前,我們學習了C語言的大多數的技能,今天,我們就用這些技能來編譯一個簡易的計算器的編程。在此之前,我們需要知道計算器需要什麼,例如加減乘除等,我們要使用什麼變量,當然了雙精度整形變量無疑是最佳的選擇。
  • 快速上手系列-C語言之基礎篇(一)
    按照之前的計劃,這篇文章本該寫C語言簡介,包括一些歷史背景,發展狀況, 語言特點什麼的,這些東西著實比較囉嗦。吃飯用的筷子,到現在我都不知道它的由來,不知道它是在什麼歷史背景下誕生的有些東西還是有必要了解一下,比如,C語言所產生的代碼運行速度比彙編語言編寫的代碼運行速度稍慢一點,但還是有得一拼,同時C語言要比彙編語言編寫的代碼可讀性高,可移植性好。
  • c語言是好幾百年的內功,python是大力金剛掌?
    python現在作為最火的語言之一。在不久前成功壓住了c語言和Java,這是科技進步的發展的必然結果。python非常容易學也是一個很重要的原因。主要還是學習python還抓住了時代的潮流,順應時代的發展,比如未來的發展的方向,人工智慧這一些。