從最簡單的指標變數出發,
比如int a;
那麼a是乙個整形變數
現在int *a;
那麼a是乙個指標變數
指標a表達的是某個位址,它需要依託某個實實在在的東西
比如:typedef struct
ringbuff_t;
static ringbuff_t ringbuff;
ringbuff_t *pringbuff = &ringbuff;
這樣就定義了乙個實實在在的東西ringbuff 和 乙個指標變數pringbuff
兩者在使用乙個是 . 乙個是 ->
程式設計高手一般喜歡指標變數,寫出的程式很輕盈,耦合度低。
結論:指標變數其實是乙個變數,它指向某個實實在在的東西。
經典嵌入式風格**:
void buzzinit()
庫函式風格**:
hal_gpio_writepin(led_gpio_port, led_pin,gpio_pin_reset);//不亮
hal_delay(100);
hal_gpio_writepin(led_gpio_port, led_pin,gpio_pin_set);//亮
hal_delay(100);
指標變數風格**:
unsigned int *p1,*p2;
printf("gpiob->brr::%0x give p1\n",data);
p1=(unsigned int*)data;
data = (unsigned int)&gpiob->bsrr;
printf("gpiob->bsrr::%0x give p2\n",data);
p2=(unsigned int*)data;
void newio_test(void)
位帶風格:stm32l471失敗
繼續:函式指標
函式指標重音是指標,它是指向函式的指標。前面說指標變數是指向實實在在的東西,在函式指標的情形下這個實實在在的東西就是乙個函式。
補充知識:指標函式
指標函式重音是函式,這個函式比較特殊是它的返回值是乙個指標,也就是char*。
【實際程式設計用的比較少 因為返回char* 記憶體是個問題 著名函式是malloc】
型別名 *函式名(函式引數列表);
其中,字尾運算子括號"()"表示這是乙個函式,其字首運算子星號"*"表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到乙個"指向返回值為…的指標(位址),"型別名"表示函式返回的指標指向的型別"。
"(函式引數列表)"中的括號為函式呼叫運算子,在呼叫語句中,即使函式不帶引數,其參數列的一對括號也不能省略。其示例如下:
int *pfun(int, int);
由於"*"的優先順序低於"()"的優先順序,因而pfun首先和後面的"()"結合,也就意味著,pfun是乙個函式。即:
int *(pfun(int, int));
接著再和前面的"*"結合,說明這個函式的返回值是乙個指標。由於前面還有乙個int,也就是說,pfun是乙個返回值為整型指標的函式。
2在嵌入式的應用,點亮發光二極體
用庫函式
用函式指標
用位帶3在業務層的應用
發卡走流程的抽象
從變數到指標到引用
1.再熟悉不過的說法,引用是變數的別名,操作引用跟操作變數的效果是一樣的 2.引用不是物件,因此,不會給引用分配記憶體空間 3.引數傳遞如果形參是引用,那麼此時引用的表現就像指標一樣,可以直接改變變數的值。這三個特點聽起來簡單,但是如果深入思考一下,就不由得疑惑 究竟是什麼造成了引用的這些特點,而引...
從變數到函式,從函式和全域性變數到模組,從模板到包
總體來說關係從上到下 包 子包 模組 全域性變數 函式,函式 變數。一 包 packages 包是指乙個包含模組與乙個特殊的 init py檔案的資料夾。二 模組 modules 乙個模組可以被其他程式匯入並執行其功能。通常通過使用 import 和 from.import 語句來實現。比如 imp...
函式指標 (變數)
函式指標的宣告方法為 函式型別 標誌符 指標變數 名 形參列表 注意函式指標變數和 函式指標型別的區別 1 直接宣告乙個函式指標變數 類似struct型別的定義和宣告,放在一起 int func int x 宣告乙個函式 int f int x 宣告乙個函式指標 f func 將func函式的首位址...