c語言知識筆記,c語言最全筆記

本文目錄一覽:

C語言筆記(五)—-struct,enum,typedef等

成員表列由若干個成員組成,每個成員都是該結構的一個組成部分。

對每個成員也必須做類型聲明。

其形式為:

類型聲明符 成員名;

例如:

注意, 最後括號外面的;分號是不可少的 。

結構定義之後,才可以進行變量聲明。

凡聲明為結構 stu 的變量都由上述4個成員組成。

由此可見,結構是一種複雜的數據類型,是數目固定,類型不同的若干有序變量的集合。

聲明結構變量 有以下三種方法。

使用上面定義的stu為例:

如:

也可以用宏定義使一個符號常量來表示一個結構類型。例如:

例如:

這種形式的聲明的一般形式為:

例如:

這種聲明的一般形式為:

第三種方法與第二種方法的區別在於第三種方法中省去了結構名,而直接給出結構變量。

在程序中使用結構變量時,往往不把她作為一個整體來使用。

在ANSI C中除了允許有相同類型的結構變量相互賦值以外,一般對結構變量的使用,包括 賦值、輸入、輸出、運算 等都是通過結構變量的成員來實現的。

表示結構變量成員的一般形式為:

結構變量名.成員名

例如: boy1.num boy2.sex

如果成員本身又是一個結構,則必須逐級找到最低級的成員才能使用。如: boy1.birthday.month

結構變量的賦值就是給各成員賦值。

數組的元素也可以是結構類型的。

因此可以構成結構型數組。

初始化賦值:

當然也可以在定義 stu結構 時同時聲明 pstu。

賦值是把結構變量的首地址賦予該指針變量,不能把結構名賦予該指針變量。

如果 boy 是被聲明為 stu類型 的結構變量。

則:

有了結構指針變量,就能更方便地訪問結構變量的各個成員。

其訪問的一般形式為:

(*結構指針變量).成員名

結構指針變量-成員名

例如: (*pstu).num 或 pstu-num

例如:

介紹數組的時候,曾介紹過數組的長度是預先定義好的,在整個程序中固定不變。

C語言中不允許動態數組類型。

例如:

但是又有此需求,為了解決這個問題,C語言提供了一些內存管理函數,這些內存管理函數可以按需要動態地分配內存空間,也可把不再使用的空間回收待用,為有效地利用內存資源提供了手段。

常用的內存管理函數有3個:

例子:分配一塊區域,輸入一個學生數據

上面的例子採用了動態分配的辦法為一個結構分配內存空間。

每一次分配一塊空間可用來存放一個學生的數據,我們可稱之為一個節點。

有多少個學生就應該申請分配多少塊內存空間,也就是說要建立多少個節點。

當然用結構數組也可以完成上述工作,但如果預先不能準確把握學生人數,也就無法確定數組大小。

而且當學生留級、退學之後也不能把該元素佔用的空間從數組中釋放出來。

用動態存儲的方法可以很好地解決這些問題。

有一個學生就分配一個節點,無須預先確定學生的準確人數,某學生退學,可刪去該節點,並釋放該節點佔用的存儲空間,從而節約了寶貴的內存資源。

另一方面,用數組的方法必須佔用一塊連續的內存區域。

而使用動態分配時,每個節點之間可以是不連續的(節點內是連續的)。

節點之間的關係可以用指針實現。

即在節點結構中定義一個成員項來存放下一節點的首地址,這個用於存放地址的成員,常把他稱為指針域。

可在第一個節點的指針域內 存入第二個節點的首地址,在第二個節點的指針域內 又存入第三個節點的首地址,如此串聯下去直到最後一個節點。

最後一個節點因無後續節點連接,其指針域可賦值 0

這種連接方式,在數據結構中稱為「鏈表」。

鏈表的基本操作主要有以下幾種:

例子:建立一個三個節點的鏈表,存放學生數據。為簡單起見,我們假定學生數據結構中只有學號和年齡兩項。可編寫一個建立鏈表的函數create。程序如下:

create函數 用於建立一個有 n個節點 的鏈表,他是一個指針函數,他返回的指針指向 stu結構。

在create函數內定義了三個 stu結構 的指針變量。

head為頭指針,pf為指向兩相鄰節點的前一節點的指針變量。

pb為後一節點的指針變量。

枚舉是一種 基本數據類型 ,而不是一種 構造類型 ,因為他不能再分解為任何基本類型。

enum 枚舉名{ 枚舉值表 };

例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };

enum weeakday a,b,c;

或者為:

enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c;

或者為:

enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;

例子:

說明:

只能把枚舉值賦予枚舉變量,不能把元素的數值直接賦予枚舉變量。如:

a=sun;b=mon; 是正確的

a=0;b=1; 是錯誤的。

如果一定要把數值賦予枚舉變量,則必須使用強制類型轉換。

如: a=(enum weekday)2;

還應該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。

例子:

typedef定義的一般形式為:

typedef 原類型名 新類型名

其中原類型名中含有定義部分,新類型名一般用大寫表示,一般用大寫表示,以便於區別。

有時也可用 宏定義 來代替 typedef 功能,但是 宏定義 是由 預處理 完成的,而 typedef 則是 在編譯時 完成的,後者更為靈活方便。

使用 typedef 定義數組、指針、結構等類型將帶來很大的方便,不僅使書寫簡單而且使意義更加明確,因而增強了可讀性。

例如:

又如:

【C語言筆記】內部全局變量和外部全局變量

1.外部全局變量, 默認情況下所有的全局變量都是外部全局變量

什麼事外部全局變量? 可以被其它文件訪問的全局變量我們稱之為外部全局變量

2.內部全局變量, 只要給全局變量加上static關鍵字就是內部全局變量

什麼是內部全局變量? 只能被當前文件訪問的全局變量我們稱之為內部全局變量

可以定義同名的外部全局變量

多個同名的外部全局變量指向同一塊存儲空間

也可以定義多個同名的內部全局變量

多個同名的全局變量如果不在同一個文件中, 那麼指向不同的存儲空間

為了提高數據的安全性, 不讓別人在其它文件中修改我們的全局變量, C語言提供了另外一個用於修改全局變量的關鍵字, static

只要用static修改的全局變量就是內部全局變量, 只能在當前文件中使用

這樣就可以提高我們全局變量的安全性

如果多個文件中存在同名的內部全局變量, 相互不會影響

如果既有外部全局變量也有內部全局變量, 那麼會優先訪問內部全局變量

用於聲明一個外部全局變量

聲明只需要在使用變量之前聲明就可以了

用於定義一個內部全局變量

聲明和定義的區別:

聲明不會開闢存儲空間

定義會開闢存儲空間

c語言知識點有哪些?

c語言知識點有:

1、C語言程序是由多個函數構成的。

2、每個C語言程序中有且只有一個main函數。

3、C語言不使用行號,無程序行的概念。

4、程序中可使用空行和空格。

5、C語言程序格式常用鋸齒形書寫格式。

6、C語言程序中可加任意多的注釋,注釋形式/*……*/,並且注釋形式不能嵌套,即不能注釋裏面又有另一個注釋。//行注釋是C++當中新增加的內容。

7、引用C語言標準庫函數,一般要用文件包含預處理命令將其頭文件包含進來。

8、用戶自定義的函數,必須先定義後使用。

9、變量必須先定義後使用。

10、變量名,函數名必須是合法的標識符,標識符習慣用小寫字母,C語言是字母大小寫敏感的語言。

11、不能用關鍵字來命名變量和函數。

12、C語言的語句都是以分號結尾的。

13、計算機中使用的進制數是二進制數,而不是十進制數,因為二進制只有兩個數碼,運算簡單便於硬件實現,同時二進制便於邏輯運算。

將十進制數轉換成二進制數應分為整數部分轉換和小數部分轉換,整數部分轉換可採用基數除法來實現,小數部分轉換可採用基數乘法來實現。八進制和十六進制也是C語言中經常表示數據的進制,因為它們與二進制之間的轉換非常方便,但要注意他們不是計算機中使用的進制。

14、機器數的表示形式有原碼、反碼和補碼幾種形式,計算機中通常使用補碼的形式來表示一個數,因為補碼運算可以連同符號位一起參與運算,這便於運算器的設計與實現。

C語言筆記——取值範圍

這章主要是留作備用,作為補充知識的吧,不過常用的數據類型的取值範圍還是得做一下了解,並且記住的。

這裡得先明確幾個個概念:

那麼一個位元組的大小能表示多大的數呢?

11111111b = FFh = 255

所以我們可以看出,在無符號位的情況下,一個位元組就能表示 0 ~ 255 的數。

通常,在有符號情況下,也就是變量類型之前有 signed 這樣的情況下,8 個比特位的第一位為符號位。

關係為:如果符號位是 0 ,那麼這就是一個正數;如果符號位為 1 ,那麼這就是一個負數。

那麼們舉個栗子:

一個 int 型的變量,默認是 signed int 並且是 4 個位元組的,那麼就佔有 8 * 4 = 32 個比特位,同時他第一位是符號位,那麼就只有 31 個比特位是表示數值的,表示的大小就是 -2的31次方~2的31次方

這裡引入一個補碼的概念,雖然我並不知道這個有啥用,但是我看教程都講了,那就也寫一下吧。

C語言基礎知識點

C語言基礎知識點集錦

【知識點1】C程序

C語言程序結構有三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)

【知識點2】main函數

每個C語言程序中main 函數是有且只有一個。讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。

【知識點3】存儲形式

計算機的數據在電腦中是以二進制的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構成。 byte 是指位元組, 一個位元組 = 八個位。數據存放的位置就是它的地址。

【知識點4】注釋

是對程序的說明,可出現在程序中任意合適的地方,注釋從「/*」開始到最近一個「*/」結束,其間任何內容都不會被計算機執行,注釋不可以嵌套。

【知識點5】書寫格式

每條語句的後面必須有一個分號,分號是語句的一部分。一行內可寫多條語句,一個語句可寫在多行上。

【知識點6】標識符

合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。

C語言標識符分如下3類

(1)關鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。

(2)預定義標識符。預先定義並具有特定含義的標識符。如define、include等。

(3)用戶標識符。用戶根據需要定義的標識符,符合命名規則且不與關鍵字相同。

關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If 是可以做為用戶標識符。因為If 中的第一個字母大寫了,所以不是關鍵字。

【知識點7】實型數據

實型數據的.合法形式:小數形式和指數形式。掌握判定指數形式合法性。

2.333e-1 就是合法的,且數據是2.333×10-1。

【知識點8】字符

字符數據的合法形式::

1 是字符佔一個位元組,”1″是字符串佔兩個位元組(含有一個結束符號)。

0 的ASCII 數值表示為48,a 的ASCII 數值是97,A的ASCII 數值是65。

字符型和整數是近親:

char a = 65 ;

printf(「%c」, a); 得到的輸出結果:a

printf(「%d」, a); 得到的輸出結果:65

一般考試表示單個字符錯誤的形式:65 “1”

字符是可以進行算術運算的,記住: 0-0=48

大寫字母和小寫字母轉換的方法: A+32=a 相互之間一般是相差32。

【知識點9】整型數據

整型一般是兩個位元組, 字符型是一個位元組,雙精度一般是4 個位元組:

考試時候一般會說,在16 位編譯系統,或者是32 位系統。碰到這種情況,不要去管,

一樣做題。掌握整型一般是兩個位元組, 字符型是一個位元組,雙精度一般是4 個位元組就可以了。

【知識點10】轉義字符

轉義字符的考查:

在程序中 int a = 0x6d,是把一個十六進制的數給變量a 注意這裡的0x 必須存在。

在程序中 int a = 06d, 是一個八進制的形式。

在轉義字符中, 』x6d』 才是合法的,0 不能寫,並且x 是小寫。

『141』 是合法的, 0 是不能寫的。

『108』是非法的,因為不可以出現8。

【知識點11】算術運算

算術運算符一共有+、—、*、/、%這五個。%符號兩邊要求是整數。不是整數就錯了。

三種取整丟小數的情況:不是四捨五入是舍掉小數部分。

1、int a =1.6;

2、(int)a;

3、1/2; 3/2;

【知識點12】強制類型轉換

將一個運算對象轉換成指定類型,格式為(類型名)表達式

一定是 (int)a 不是 int(a),注意類型上一定有括號的。

注意(int)(a+b) 和(int)a+b 的區別。前是把a+b 轉型,後是把a 轉型再加b。

【知識點13】賦值

是表達式就一定有數值。

賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

複合賦值運算符:注意:a*=m+2 是 a=a*(m+2)

自加、自減表達式:假設a=5,++a(表達式的值為6), a++(表達式的值為5);

j=a++;等價於j=a;a=a+1; 而j=++a;等價於a=a+1;j=a;。

考試口訣:++在前先加後用,++在後先用後加。

【知識點14】逗號運算

逗號表達式:優先級別最低; 表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

【知識點15】數制轉換

一定要記住二進制 如何轉換成十進制。

八進制是沒有8 的,逢8 進1,018 的數值是非法的。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154619.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-16 14:13
下一篇 2024-11-16 14:13

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論