天天看點

40篇學完C語言——(第四篇)【指針與位址】

前言

指針其實很簡單。同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);
}
           

總結