C語言基礎(下)

2020-12-09 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語言基礎知識
    pow(x, y)函數C 和 Python 語言的 pow(x, y) 方法都是用於返回 (x 的 y 次方) 的值,C 語言中其原型為:double pow(double x, double y)。數據類型整數類型下表列出了關於標準整數類型的存儲大小和值範圍的細節:浮點類型下表列出了關於標準浮點類型的存儲大小、值範圍和精度的細節:IO 函數
  • c語言是C語言 C教程語言零基礎教學04:int和float變量的基本使用
    大家好,我是陌塵那麼就直接開始了我們這篇教程學for循環以及冒泡算法我們先來理解一下什麼是「循環」字面意思:但是,C語言的循環和這個有點點不同,c語言中大概就是:重複執行一段特定的代碼。且C語言裡面的循環有多種方法來實現常見的有用for和while函數我們這節課只講for函數使用方法:for(單次表達式;條件表達式;表達式){特定代碼;}好了,又到了萬眾矚目的分析時間 了(此刻應有bgm)首先 單次表達式,意思就是只會執行一次的表達式(何為表達式?百度啊!!!)
  • C語言怎麼樣?今天聊聊C語言的發展史!
    第一個C語言編譯器是怎樣編寫的? 不知道你有沒有想過,大家都用C語言或基於C語言的語言來寫編譯器,那麼世界上第一個C語言編譯器又是怎麼編寫的呢?這不是一個「雞和蛋」的問題…… 回顧一下C語言歷史:Tomphson在BCPL的基礎上開發了B語言,Ritchie又在B語言的基礎上成功開發出了現在的C語言。
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。; /*把兩個數之和賦值給整型變量sum*/ }重點說明—1、任何一個c語言程序都必須包括以下格式:main() { }——這是c語言的基本結構,任何一個程序都必須包含這個結構。
  • 用C語言編寫屬於自己的程式語言,大一學完C語言即可做!
    首先,明確一點,咱這個項目只是做一個簡單的腳本語言而不是編譯型語言!!!其次,本文不需要太多專業知識,所以不慌。最後,本文只是簡單實現腳本語言,雖然不牛X......>2.實現變量定義,賦值和銷毀3.更多功能關注我後期發教程三 要用到的幾個 C語言 基礎庫裡的函數,請了解這些函數後再繼續閱讀:
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • 新手如何開始C語言基礎學習?
    因此,對於剛剛入門編程的新手來講,從C語言開始你的編程生涯無疑是最好的選擇。那麼,新手如何開始C語言基礎學習呢?下面我們來一起看一看。在學習之前,我們首先要知道為什麼學習C語言。眾所周知,C語言是一門簡單、底層、較早的程式語言,後來的很多語言在語法上都和C語言類似,比如Java、PHP等程式語言都是從C語言衍生出來的,因此掌握C語言將為學習其他程式語言打下更好的基礎。但同時大家也要知道,只會C語言的話,想要找工作還是很困難的。總的來講,C語言的基礎學習不過是冰山一角,要想成為一名優秀的程式設計師,需要學習的東西還有很多。
  • 現代程式語言起點,C語言之環境搭建
    C語言可以在Unix、Linux、Mac(內核為Unix)、Windows系統下兼容。2、C語言的編輯器:Notepad、EMACS、 vim/vi、Xcode3、C 編譯器寫在源文件中的原始碼是人類可讀的源。
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • 用c語言編寫表白圖案_用c語言編寫一個表白
    用c語言編寫表白圖案?用c語言編寫一個表白?
  • 學完C語言基礎語法之後,下一步如何提升
    首先,C語言本身只是一個工具,C語言自身的難度也並不算高,初學者在掌握了C語言的基本語法之後,下一步應該從實踐的角度來提升對於C語言的理解。從程序設計能力提升的角度來看,下一步應該把重點放在算法設計和數據結構上,因為軟體編程說到底就是算法和數據結構的問題。
  • c語言代碼表白公式_表白代碼c語言
    c語言代碼表白公式?表白代碼c語言?
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 世界上第一個C語言編譯器是怎麼編寫的?它為什麼能夠用C語言編寫?
    所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析,按照C語言的規則,將其轉換成cpu可以執行的二進位文件。這些操作,C語言都是可以實現的。 所以用C語言來做C語言的編譯器是完全可行的。 但是,歷史上的第一個C語言編譯器,肯定不是C語言寫的,因為在沒有編譯器時,無法把C語言轉換成可執行文件。只要有了第一版其它語言的編譯器,就可以用C語言寫編譯器了。
  • 零基礎看得懂的C語言入門教程
    此次編寫計劃編寫一個快速入門的系列以及另一個全方面學習C語言的系列。快速入門系列以輕鬆、愉悅的方式編寫,並且剝離了入門階段極少使用的技術及概念,通過最「接地氣」的方式使剛入門的新手學習到最符合當前階段的知識,計劃閱讀時長為3小時即可完成C語言關鍵內容的掌握,並且達到期末不掛科的水平。
  • C語言程序設計試題及答案
    A) 'a'&&'b' B) a<=b C) a||b+c&&b-c D) !((a<b)&&!c||1)14、設有數組定義:char array[]=「student」;則數組所佔的存貯空間為( )。
  • 物聯網開發筆記——嵌入式開發之Linux系統中C語言常量
    下面就開始這套智能家居系統是如何在物聯網基礎上構建。在這裡你可以0開始,然後到1質變,僅僅需要一起跟我學物聯網系列的開發筆記的文章。第一節物聯網開發筆記——嵌入式開發之Linux系統環境搭建主要講解了在Windows系統下,用虛擬機的方法搭建環境
  • C語言程序設計教程C語言概述-公式編寫必備基礎好課低價分享
    C語言程序設計教程C語言概述-公式編寫必備基礎高清分享;聯繫qq:21453186需要該課程的朋友們