標籤:c語言 指標
每個指標都有一個值
指標是一個非負的整數值,表示儲存的地址.
指標必定有個類型
這個類型指的是指標指向這個地址單元(連續的地址空間)存放的資料類型.void表示泛型,可以轉換成任何類型.
用”*”可以聲明一個指標變數, 也可以間接引用指標.
用(int *)p來聲明p是指標, 類型為int. 通常情況下括弧可以省略. 用*p解引用來擷取指標p指向的值.
用&擷取一個變數的地址
&只能放在在變數的前面, 即只能操作左值.
可以改變一個指標的類型,但是指標的值沒有變
指標的類型和指標的值應該分開來看待.
指標和數組密切相關
數組名就是一個指標, 只不過數組名是一個不能改變的指標, 不能做自增和自減移動.
指標可以指向函數
函數名就是一個指標變數, 只是C語言把它簡化了, 不需要顯示聲明函數為指標. 既然函數名是一個指標變數, 我們就可以把函數名當做右值賦值給另一個函數指標. 可實現回呼函數(callback).
執行個體
#include<stdio.h>void swap(int *x, int *y){ int t = *x; *x = *y; *y = t;}int main(){ //聲明指標 int *p; int x = 13; p = &x;//擷取變數的儲存地址 printf("The value of p is: %d\n", p); printf("The size of p is: %d\n", sizeof(p)); //指標類型轉換 char *q = (char *)p; printf("The value of q is: %d\n", q);//返回的值和p一樣 printf("The value of *q is: %d\n", *q);//傳回值為13,說明系統按小端序存放資料 //聲明一個函數指標fswap, 函數簽名與swap一樣. void (*fswap)(int *, int *); fswap = swap;//函數指標fswap賦值 int a = 3, b = 5; //函數指標調用 fswap(&a, &b); printf("after swap: a is %d, b is %d\n", a, b);}
C語言指標必知必會