前言
指針其實很簡單。同C語言中其他變量一樣,把指針也看成是一種變量即可,這種變量專門存儲位址值。
int a = 100;
int* b = &a;
上面的代碼很清晰,a是一個整形變量,值為100;b是一個指針變量,值是變量a的位址。變量和指針的類型必須相同。
本文主要講利用指針變量如何讀寫位址中的值。
正文
1、首先來假設一個場景:交換a和b兩個變量的值。看下面的例子:
void swap(int x, int y)
{
int tmp = x;
x = y;
y = tmp;
}
void change()
{
int a = 100;
int b = 200;
swap(a, b);
}
結果a,b的值并沒有交換成功。原因是:C程式在調用函數時使用“按值調用”,這意味着變量的值直接從調用函數複制到被調函數的實參中,“按值調用”是C語言中調用函數的唯一方式。
2、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)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void change()
{
int a = 100;
int b = 200;
swap(&a, &b);
}