C語言容易暈的問題

C語言三座大山:數組、指針、函數。

單個概念並不複雜,但是概念互相套在一起就容易迷糊。基於此,整理如下:

1 數組:一批內存位置相鄰的變量。

指針與數組:

因爲指針可以用來做運算,所以通常可以用指針來指向數組。

int a[3] = {1,2,3};
int *p = a;

如上:p是變量, a是數組常量, 數組名本身就是個指針,但a是常量。

2 指針數組與數組指針:

指針數組:見名知意,是一個數組,其每個元素是指針。

例:int *p[4] 其中p是個長度爲4的數組,每個元素類型是整型指針。

數組指針:本質是個指針,指向一個數組。

例:int (*p)[4] 其中變量p是一個指針,指向長度爲4的元素爲整型變量的數組。

3 指針函數與函數指針

指針函數:本質是個函數,返回值是個指針類型

int * func(int i, int j) 

{
    return &i;
}

函數指針:本質上是個指針,指針類型是函數

int max(int a, int b)
{
    return a > b ? a : b;
}
int (*p)(int, int);
p = max; 

4 指針常量與常量指針

指針常量:本質是個常量,常量類型是個指針 誰離變量近,變量類型就是誰

int a;
int *const p = &a; 
p不可以變 *p可以變

常量指針:本質是個指針,指向內容是個常量

int a; 
int const *p = &a;
(*p)不能變,指針指向的內容(p)可以變

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章