指標陣列與陣列指標、函式指標:
指標陣列 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.盡...