C語言基礎(下)

2020-12-19 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語言基礎專題05 - 邏輯運算
    STC8G單片機基礎仿真板:老司機開車,請坐穩。
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。; /*把兩個數之和賦值給整型變量sum*/ }重點說明—1、任何一個c語言程序都必須包括以下格式:main() { }——這是c語言的基本結構,任何一個程序都必須包含這個結構。
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • keil C語言與彙編語言混合編程
    無參數傳遞的函數調用C51調用彙編函數1.無參數傳遞的函數調用先來個例子:其中example.c和example.a51為項目中的兩個文件*example.c*extern void delay100();main(){delay100;}*example.a51*?PR?
  • C語言基礎:標識符
    標識符:在程式語言中,標識符是用戶編程時使用的名字,變量、常量、函數、語句塊都有名字。是用來標識某個實體的一個符號,是對變量名、函數名、標號和其他各種用戶定義的對象命名。C語言中標識符的命名規範:1.標識符由字母、數字、下劃線組成,並且首字母不能是數字。(C 標識符內不允許出現標點字符,比如 @、$ 和 %。)2.標識符對大小寫敏感,即嚴格區分大小寫。一般對變量名用小寫,符號常量命名用大寫。
  • 如果是初學C語言請看完,如何學好C語言絕對精品
    C語言是各大作業系統的基礎,Unix、Linux、Windows其內核都清一色是C語言開發的,(某些地方是和彙編語言混合開發的),君不見Windows API都是C語言函數的接口?前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。
  • 入門C語言!
    也許有很多同學想學習C語言,卻不知道從什麼地方入手。或者有一些同學,學了一些基礎,太簡單的覺得枯燥無趣,有點複雜的又靜不下心來細細琢磨,也就是所謂的瓶頸時期,如果過了這個時期,C語言的學習就會順暢很多,高度也會大幅度提升。
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 零基礎看得懂的C語言入門教程
    此次編寫計劃編寫一個快速入門的系列以及另一個全方面學習C語言的系列。快速入門系列以輕鬆、愉悅的方式編寫,並且剝離了入門階段極少使用的技術及概念,通過最「接地氣」的方式使剛入門的新手學習到最符合當前階段的知識,計劃閱讀時長為3小時即可完成C語言關鍵內容的掌握,並且達到期末不掛科的水平。
  • 怎樣學習C語言(獻給迷茫的C愛好者)!
    C語言是各大作業系統的基礎,Unix、Linux、Windows其內核都清一色是C語言開發的,(某些地方是和彙編語言混合開發的),君不見Windows API都是C語言函數的接口?只是這本書並不十分適合剛開始學習的人,假設你曾經學過C語言,有那麼一些C語言的基礎但又不是非常紮實,那麼你能夠嘗試一下這本書。我相信,僅僅要你理解了指針,C語言便不再神奇。  假設你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。
  • 單片機的程式語言:彙編語言、C語言、PL/M和BASIC語言
    單片機的程式語言很多,目前常見的程式語言有4種,即彙編語言、C語言、PL/M和BASIC語言。下面我們來介紹一下吧:一、BASIC程式語言BASIC是一種高級語言,它的英文含義是「初學者通用符號指令代碼」,是在1965年5月,由美國科學家託馬斯•庫爾茲研製出來的。10多年後,微軟公司把它移植到微型機上。
  • 快速上手系列-C語言之基礎篇(一)
    按照之前的計劃,這篇文章本該寫C語言簡介,包括一些歷史背景,發展狀況, 語言特點什麼的,這些東西著實比較囉嗦。吃飯用的筷子,到現在我都不知道它的由來,不知道它是在什麼歷史背景下誕生的有些東西還是有必要了解一下,比如,C語言所產生的代碼運行速度比彙編語言編寫的代碼運行速度稍慢一點,但還是有得一拼,同時C語言要比彙編語言編寫的代碼可讀性高,可移植性好。另外,相對於其他高級語言,比如C++、java、C#等來說,C語言編寫的代碼運行效率要高。
  • DS80C400的Keil C語言編程
    簡單程序,如網絡揚聲器,可以用彙編語言輕鬆實現,更複雜一點的,如HTTP伺服器這種需要與文件系統交互的程序,可以使用C語言。 文中介紹了如何從Keil的uVision2開發套件著手構建一個DS80C400的C語言應用程式,通過實現一個簡單的HTTP伺服器演示如何使用DS80C400的ROM功能。
  • python與c語言的語法有哪些不一樣的
    在眾多程式語言之中,想必很多人都聽說過Python和C語言,在進行編程學習之前,大家都會問:python和c語言的區別有哪些?我該如何選擇?接下來我們來看看吧。python與C的區別如下:1、語言類型:Python是一種基於解釋器的語言,會逐行讀取代碼,將Python編譯為字節碼,由大型C程序解釋;C是一種編譯語言,完整的原始碼將直接編譯為機器代碼,由CPU直接執行。
  • C/C+編程筆記:零基礎講解C語言——基本字符集
    C語言過程中最枯燥的部分,分幾次講解,我會儘量用最輕鬆的方式講解 在C語言中,符號常量,變量,數組,函數等都需要一定的名稱,我們把這種名稱成為標識符。也就是說,標識符我們為C語言中出現的所有元素取得名字。
  • C/C+編程筆記:在C+中如何調用C語言的代碼?你可以這樣做
    比如在C文件中存在一個函數func_c(), 該文件與C++的工程混編在一起時,可以直接在C++中調用C文件中的func_c();不需要做任何額外處理。 不過在C中,不可以調用C++的接口,也不能直接調用C語言的一些API,否則編譯會出錯。這個時候呢,就需要我們今天的主角:extern "C"了!
  • 單片機c語言教程:建立你的第一個KeilC51項目
    隨著單片機技術的不斷發展,以單片機C語言為主流的高級語言也不斷被更多的單片機愛好者和工程師所喜愛。使用C51肯定要使用到編譯器,以便把寫好的C程序編譯為機器碼,這樣單片機才能執行編寫好的程序。
  • C語言入門基礎
    (2)下一個結點的地址。4、鍊表中各元素在內存中的地址可以是不連續的。5、要找某一元素,必須先找到上一個元素,根據它提供的下一元素地址才能找到下一個元素。如果不提供「頭指針」,則整個鍊表都無法訪問。