尚觀嵌入式c語言程式設計高階筆記 2 陣列

2021-07-27 11:04:44 字數 1951 閱讀 4192

一、陣列(array)的使用

1、陣列:具有相同型別的資料的有序集合,並用唯一的名字來標誌

2、陣列必須直接宣告,編譯器在編譯階段為其分配記憶體空間

3、陣列所有元素佔據連續的記憶體空間,在記憶體中是線性存放的,儲存陣列所需的記憶體空間直接與基型別和陣列長度有關

4、陣列占用的記憶體空間是:sizeof(基型別)*陣列長度

5、c不檢查陣列是否越界,程式可以在兩邊越界,程式設計師應自己加入越界檢查,初始化時不允許越界

6、向函式傳遞陣列

定義陣列形參的方法有三種:指標、定長陣列、無尺寸陣列

void func1(int *a);

void func2(int a[10]);

void func3(int a);

在函式的形參宣告中,陣列的尺寸無所謂,因為c語言沒有邊界檢查。實際上,在第二種方法編譯後,編譯器產生的**就是讓函式接受指標,並不生成10個元素的陣列

(1)形參中的陣列不能再理解為陣列,必須理解為指標,不能用sizeof()求大小,但可以再賦值,這與陣列名的指標常量性質不一樣。傳值時有內容的複製,但陣列內的元素可能很多,為避免內容的大量複製而占用太多的記憶體,c規定陣列的傳參就是穿指標。

(2)int a不能做形參,因為a是指向int這樣一種資料型別的陣列指標,但下標大小沒有確定。而int[8]可以,並可以直接用二維陣列名(無須顯示轉換)做其實參。

7、在處理乙個陣列的元素時,使用指標自增(p++)的方式通常比直接使用陣列下標更快,使程式得以優化

8、c允許定義多維陣列,維數上限由編譯器定義,但多於三維的陣列並不常見,因為多維陣列所需的記憶體空間對維數呈指數增長。並且,計算各維下標會占用cpu時間(訪問多維數元素的速度比訪問一維陣列元素的速度慢)

9、對陣列初始化時注意,c89要去必須使用常量初始化**,c99允許使用非常量初始化字元來初始化本地陣列。

二、字串(string):陣列(尤其是一維陣列)最常用的地方

1、c沒有專門的字串變數,對於它的操作全部由一維陣列實現,字串是字元陣列的一種特殊形式,唯一的區別就在於它是作為乙個整體操作,而普通的陣列則不能,最終的差別就在末尾的null(0)上。

2、初始化操作:要使用字串常量時把它放到資料區中的const區(資料區、全域性變數區和靜態變數區),用字串常量初始化字串陣列時有乙個複製內容的操作而不僅僅是用乙個指標指向它。實際上字串常量是在常量區還是堆區、採用何種儲存結構、以及是否連續的問題,取決於不同的編譯器。

3、字串的輸入與輸出

下面函式均由定義

(1)printf("%s",str);

(2)puts(str);

(3)scanf("%s",str);

(4)gets(str);

4、串運算

下面函式均由定義

(1)strcpy(s1,s2);

把s2所指字串(源)的內容複製到s1所指的儲存空間(目的)中,函式返回s1的值,即目的串的首位址

(2)strcat(s1,s2);

將字串s2新增到字串s1的末端,但必須保證字串s1足夠大,以便儲存它自己的內容和s2的內容

(3)strlen(str);

計算字串長度,不包括「\0」在內,返回長度值

(4)strcmp(s1,s2);

比較兩個字串是否相等,相等返回0,s1>s2返回正數,s1

(5)strchr(s1,ch);

功能就是找出在字串s1中第一次出現字元ch的位置,找到就返回該字元位置的指標(也就是返回該字元在字串中的位址的位置),找不到就返回空指標(就是 null)。

(6)strstr(s1,s2);

功能就是找出在字串s1中第一次出現字串s2的位置(也就是說字串sr1中要包含有字串str2),找到就返回該字串位置的指標(也就是返回字串str2在字串str1中的位址的位置),找不到就返回空指標(就是 null)。

5、字元陣列、字元指標之間的==比較是位址的比較,結果不可能是true,應用strcmp()函式來比較

尚觀嵌入式c語言程式設計高階筆記 1 遞迴函式

一 遞迴 函式的自我呼叫,是自己定義自己的過程。函式在呼叫自身時,在棧區為區域性變數和參量分配記憶體空間,但並不複製記憶體 只重新分配相應的變數。每個遞迴呼叫返回時,其區域性變數和引數的空間都被釋放,在函式中的呼叫點繼續執行。遞迴程式優點 能生成某些演算法的更清晰 更簡潔的版本,某些專門問題 如ai...

嵌入式系統高階C語言程式設計

內容介紹 本書主要介紹針對嵌入式系統基於c語言的軟體專案開發流程 較為複雜的c語言程式設計知識與技巧 程式設計風格及除錯習慣,並通過對乙個具體的軟體模組 asix window gui 的分析,介紹分析 的方法以及設計軟體系統需要考慮的各要素。本書以實際專案中的 為例來進行介紹,詳細分析在嵌入式系統...

嵌入式C語言學習筆記2

1.資料型別基本型別 整型 signed short int long long long 考慮整數長度?unsigned 字元型 char 有符號,無符號 實型 float double 列舉型 enum 1 bool布林型別 邏輯型別 true false 真和假 例一 int main els...