指標其實很簡單。同c語言中其他變數一樣,把指標也看成是一種變數即可,這種變數專門儲存位址值。
int a = 100;
int* b = &a;
上面的**很清晰,a是乙個整形變數,值為100;b是乙個指標變數,值是變數a的位址。變數和指標的型別必須相同。
1、首先來假設乙個場景:交換a和b兩個變數的值。看下面的例子:
void swap(int x, int y)
void change()
結果a,b的值並沒有交換成功。原因是:c程式在呼叫函式時使用「按值呼叫」,這意味著變數的值直接從呼叫函式複製到被調函式的實參中,「按值呼叫」是c語言中呼叫函式的唯一方式。
第一類:建立指標變數,「 基本型別+ * 」。
int* iptr;
char* cptr;
double* dptr;
第二類:給指標變數賦值,「 &+變數 」。
int a = 100;
char b = 'o';
double c = 100.5;
int* iptr;
char* cptr;
double* dptr;
iptr = &a;
cptr = &b;
dptr = &c;
int a = 100;
int* iptr = &a;
int b = *iptr;
於是,上面的**改寫成:
void swap(int* x, int* y)
void change()
3、乙個函式只能訪問自己的棧幀。
但是,通過指標,乙個函式可以間接地讀寫另乙個棧幀中的變數值。
值得注意的是,函式之間利用指標讀寫是有方向的。如果函式f1呼叫f2,則f2可以讀寫f1中的變數值,反之不行。很好理解,f2得棧幀先出棧,出棧後變數都沒有了,f1還讀寫什麼呢?
指標並不難。
C語言學習筆記(2) 指標(下)
它的第乙個引數是置空記憶體的首位址,第二個引數寫0,第三個是置空的大小,單位位元組 sizeof a memcpy 實現第乙個引數是目標位址,第二個是源位址,第三個是copy多少內容,單位位元組 注意使用過程中假如待拷貝的陣列和目標陣列型別不同,short int 和int等。會輸出如下奇怪 的結果...
C語言學習(三) 指標
指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...
C語言學習4 指標
int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...