嵌入式C語言之C語言的高階表達與指標的高階應用

2021-08-29 08:03:42 字數 1935 閱讀 2274

指標陣列與陣列指標、函式指標:

指標陣列  int *p[5]   相當於int *(p[5])  (陣列內的每個變數為指標變數)

首先是乙個陣列,其次陣列內的元素都是指標型別。

指標陣列的實質是陣列,這個陣列內存放的元素是指標型別的。

陣列指標 int (*p)[5]   首先是乙個指標,其次指標指向乙個陣列,陣列內的元素為int型別

陣列指標的實質是指標,這個指標指向對應的陣列。

注:*的優先順序小於;

函式指標:本質還是指標變數,只是指標指向的是乙個函式。函式的實質是一段**,這段**的位址在記憶體                      之中是連續分布的。所以對於函式來說,最重要的時函式第一句**的首位址,這個位址就是此函式的位址。

(相當於陣列,只要知道陣列的首元素的首地就可以知道每個元素的位址)

函式名做右值時,加不加&效果和意義是一樣的,凡是陣列做右值時不同。

int*         指標陣列:1.是乙個陣列2.陣列的內容是指標3.大小由內的內容決定4.指標指向的記憶體大小由int決定

int (*)  陣列指標:1.是乙個指標2.指標指向的是乙個陣列3.陣列的內容是int型4.陣列的大小由[ ]內內容決定

int(*)()函式指標:1.是乙個指標2.指向的是乙個函式3.函式的返回值是int型(函式沒有型別,只有函式返回值有型別)4 .                                     函式指標指向的記憶體大小由函式決定

int(*)()函式指標陣列:1.是乙個陣列2.陣列內放的是函式指標3.陣列的大小由[ ]的內容決定3.指標指向的是函式(函式名不加                                        ()代表函式位址,函式名加()代表函式呼叫

int*  、int (*)、int(*)()、int(*)()都屬於資料的型別,只是將此種資料型別的變數名提至前面。而不是放在了最後。(前四種相當於int a的資料型別為int ,而變數名a提至前面)

結構體內嵌函式指標實現分層:

複雜程式的編寫必須分工,分工的前提是分層。(示例:簡單的計算器的實現。上層程式實現程式框架,下層實現計算器具體的程式。實際上上層程式呼叫下層程式)

下層**核心是結構體變數:1.定義結構體變數 2.填充結構體變數 3.呼叫上層寫好的介面函式,把結構體變數傳給他即可。

上層**:注重業務邏輯,注重要實現的功能,與我們最終的目標相關聯。

->的使用:通過結構體指標變數直接獲得結構體變數的成員變數。

一般的形式:結構體指標變數->成員變數。

例如:struct stu 

void jisuan(struct stu *stu1)

typedef :

typedef 定義的是型別而不是變數(型別是乙個資料模板,變數是乙個實在的資料,且型別不佔記憶體)

在物件導向中,型別就是類class,變數就是物件。

typedef +原有的資料型別+新定義的資料型別;

define +新定義的資料型別+原有的資料型別

定義完在}後面必須加;分號。

二重指標:char *型別的變數可以通過再次取位址&得到二重指標char **型別;

1.二重指標多用來指向指標陣列。

例:  

int *p1[5];

int *p2;

int **p3;

p3=p1;  //p1是指標陣列名,本質是陣列名,做右值表示陣列的首元素首位址

2.在實際程式設計中,多用於函式傳參時為了通過函式內部改變外部的乙個指標變數。

二維陣列的指標引用:a[i][j]=*(*(p+i)+j);          

(此時的*(p+i)其實是乙個*(p+i)的位址)

二維陣列的陣列名表示二維陣列的第一維陣列的首元素的首位址

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

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

嵌入式C語言總結

這幾天花了兩天時間看了一些嵌入式c語言方面的內容,以下是一些讀書筆記,記錄一下。1 不能有返回值 2 不能向isr 傳遞引數 3 isr盡可能的短 4 printf有重入問題 1 中斷服務程式isr 2 硬體初始化 1 某io 晶元被定為在 cpu的儲存空間而非 io空間,而且暫存器對應於某特定位址...

嵌入式c語言優化

一.演算法和資料結構優化 1.針對應用的演算法優化,比如,在音訊編譯碼中,用fft實現時頻變換。2.c語言級別的優化,如排序演算法的選擇。3.資料結構的選擇,如果需要隨機訪問,則盡量選擇陣列,如果需要隨機插入刪除,則可以選擇鍊錶。4.盡量用指標代替資料操作,大部分編譯對於指標會生成更小更快的 5.盡...