最普通的指標:int *a;
呼叫形式:
1、a——a指向的物件的位址
2、a——a指向的物件的值
3、&a——a自身的位址
常用來作為引數,呼叫陣列,加上乙個說明陣列的長度的,從而獲取不定大小的陣列
第二種:
int a[n] //指標陣列,包含n個整型指標
對應地:
int (*a)[n] //陣列指標,指向大小為n的陣列
嵌入式程式設計中常見對暫存器進行讀寫的:
特別的:
*(int*)(addr) //addr為位址,通常形式為0x00d0f110(具體位數看晶元而定);
陣列和指標:
int num=
陣列其實在記憶體中就是一段連續儲存的記憶體區域
陣列的首位址,int *ptr=&num[0]或者int *ptr=num
char str1=「hello」 它的長度是5+隱藏的"\0" ,是6
char *ptr=str1;
指標的移動和減法:
只有同型別的指標相加減才有意義
指標相減代表計算兩個指標的距離,比如相距20個位元組,int型別,就是20/4=5
int num=
int p=num;
p[3]=等價於=(p+3)
指標的用法:實現乙個函式有多個返回值的效果
指標變數:
指標隱含兩種東西:乙個是指標變數,乙個是指標常量。但是大多數情況下,指標都是指代的指標變數。
指標變數和普通變數相同,都是用於儲存資料的,只是指標變數存放的資料很特殊,是記憶體位址。一般情況下,如果不考慮指標強制轉換的話,我們要求某個型別的位址必須放到對應的型別的指標變數中。
例如:
int a = 10;
int *p = &a;
指標變數的型別作用:
對於指標變數來說,其型別是由普通型別+星號構成。星號的個數表明了指標變數的級數,指標變數用來儲存位址,有如下對應關係:
1、某型別一級指標變數 = 該型別一級位址
2、某型別二級指標變數 = &(該型別以及位址)
3、n+1級指標變數 = &(n級指標變數)
需要注意的是計數超過三的時候,會降低空間的訪問速度,所以過高階的指標變數是沒有太大意義。
訪問結構體成員的基本方法有兩種:
1、定義乙個結構體變數直接訪問成員變數;
2、定義乙個結構體指標變數間接訪問結構體變數。
(1) 結構體變數訪問:
tsci sci1;
sci1.data [ sci1.pos++]= num;
(2) 結構體指標變數訪問:
tsci *sci2,b;
sci2= &b; //指標變數必須初始化 指向乙個結構體變數
sci2->data[sci2->pos++] = num;
(3)(*sci1).data sci2->data 效果等效
例子:
#include struct stu
;struct data;
int add(struct stu *ss1, struct stu *ss2)
int main()
注意點:
1.定義結構體指標後,一定要給它分配空間,有兩種方式,一種死malloc,另一種是用乙個結構體變數的位址給他賦值。
2.通過結構體指標訪問接頭體成員,用->;通過結構體變數訪問成員,用.;並且優先順序:.高於*。
3.作為函式引數時,要分清指標還是變數。要是指標就直接傳入,要是變數就取位址&。
嵌入式C語言 學習筆記
一 位運算 符號運算規則 與 兩個位都為1時,結果才為1 從真假方面看,只有當兩個位都為真時,結果才為真 或 兩個位都為0時,結果才為0 從真假方面看,如果兩個運算物件中相應的乙個位為真或者兩個位都為真,那麼結果為真 異或 兩個位相同為0,相異為1 從真假方面看,如果兩個運算物件中相應的乙個位為真且...
嵌入式C語言學習筆記2
1.資料型別基本型別 整型 signed short int long long long 考慮整數長度?unsigned 字元型 char 有符號,無符號 實型 float double 列舉型 enum 1 bool布林型別 邏輯型別 true false 真和假 例一 int main els...
嵌入式C語言學習(二)
c語音基礎 1.函式 形參與實參 函式呼叫 區域性變數和全域性變數 extern 動態儲存變數和靜態儲存變數 static 內部函式 定義加static 和外部函式 定義和使用時加extern 2.預編譯處理 2.1巨集定義 define 識別符號 字串 巨集名用大寫 巨集定義不是語句,不加分號 巨...