C語言學習(2) 指標變數和位址

2021-08-19 02:18:38 字數 1128 閱讀 1661

指標其實很簡單。同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...