C語言基礎知識(六)(指標)

2021-10-09 02:34:03 字數 2550 閱讀 7091

一、宣告和定義的區別

建立儲存空間的宣告稱為定義,不需要建立儲存空間的宣告稱為宣告。

二、變數指標和指標變數

乙個變數的位址成為變數的指標。如果有乙個變數專門存放另一變數的位址,稱它為指標變數,也就是說指標變數的值是位址,例如:int *pointer。

指標變數的賦值:

定義的時候初始化

int a = 5;

int *p = &a; 指標變數前面的*表示該變數的型別為指標變數,指標變數的名是p,不是*p。

變數賦值

int *p;

p = &a; 把a的位址給了指標變數p。

*p = 1; 表示將1賦值給p指的變數,也就是說把1賦值給a,即a=1;但是int*p=0;除外,該語句表示指標為空

int *pointer = 100; 不對,指標變數只能存放位址,不能將整數直接賦值給指標變數。

三、指標變數作為函式引數(通過函式,改變其他函式的值)

#includeint main()

只是改變了p1和p2的指標位址,但為改變a和b的值

void s1(int *p1,int *p2)

利用指標,改變了a和b的值

void s2(int *p1,int *p2)

四、指標引用陣列

指標引用陣列 

int a[10]=;

int *p = a;

或 int *p = &a[0];

或 int *p;

p = a;

對指標進行加減操作

p + 1 或 a + 1都代表陣列a中的下乙個元素

p - 1或 a - 1代表陣列a中的上乙個元素

也可進行p++等運算,也是代表指向陣列中第幾個元素,而不是位址

a[i] 或 *(a + i) 或 *(p + i)都代表陣列a中的第i個元素

注意:

要是p現在指的是a[2],那麼p[2]就是指的a[2+2]=a[4]

五、指標相減,計算距離(相加無效)

如果指標變數p1和p2都指向同一陣列,如執行p2-p1,結果為p2-p1的值再除以陣列元素的長度。即,p2

指向整型陣列a[5],p2的值為2020,p1指向整型陣列a[3],p1為2012,則p2-p1的結果是(2020 - 2012)/4 = 2。這表明p1所指的元素和p2所指的元素之間相差2個元素。但是p1+p2是無意義的。

六、自加

int a[10]=;

int *p = a;

但是a++ 是不能運算的,因為a為位址常量,不能進行自加或自減

*p++,結合方式為從右向左,代表先運算*p,再進行p++,即*p++為a[0]的值

*++p,代表先運算*p,再進行++p,即*++p為a[1]的值

++*p,代表++(*p),即先取出a[0]的值1,再進行加一,因此最後的值為1+1=2

七、用陣列名作為傳遞引數

當用陣列名作為引數的時候,如果形引數組中各元素的值發生變化,實參陣列元素的值也隨之變化。

八、指標引用多維陣列

a[0] + 0, a[0] + 1, a[0] + 2等表示a[0][0]、a[0][1]、a[0][2]、a[0][2]的位址,即為&a[0][0]、&a[0][1]、&a[0][2]。

*(a[0]+1)表示a[0][1]的值。

九、通過指標引用字串

char *string="nihaoshijie"; //string是字元指標變數,把字串的首位址給了string。

十、指向函式的指標

宣告乙個指向函式的指標,例如

型別名 (*指標變數) (函式引數型別);   是不是函式指標,看後面的函式引數型別是不是有倆括號

int (*p) (int, int); p為指向函式的指標變數,返回型別為int,指向的函式有兩個int型引數

先別函式位址給指標,再呼叫

例如要呼叫max(int a, int b);的函式

p=max; 指標指向位址

int c= (*p)(a, b); 指標呼叫max函式

一、返回指標值的函式

型別名 *函式名(引數列表);

例如:int *a(int x, int y);

帶有引數的函式a,返回整型指標

「排長」和「班長」

int a[3][4];

int (*b)[4]; 定義指向包含4個元素的一維陣列的指標變數(int *b[4]為指標陣列)

b=a; 代表a的第0行的位址給b了

b=a+1; 代表a的第1行的位址給b了

b=*a; 代表a的第0行第0列的位址給b了

b=*a+1; 代表a的第0行第1列的位址給b了

二、指標陣列和多重指標

型別名 *陣列名[陣列長度]

C語言基礎知識回顧 4 指標

c語言基礎知識回顧 超適用於計算機二級 int p,s,k 20 s k p s 三者關係如下圖 int k 1,q,p q k s k 1 不合法賦值 p q 該關係如下圖 p null 等價於p 0 或p 0 表示給指標變數賦空值.1 通過指標來引用乙個儲存單元 通過 間接訪問運算子 e.g.i...

C語言基礎知識整理15指標 2

如果在程式中定義乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始位址 又稱入口位址 稱為這個函式的指標。若想呼叫乙個函式,除了可以通過函式名呼叫以外,還可以通過指向函式的指標變數呼叫。指標變數 函式引數 指標變數 就是呼叫函式,其等價於函式名 指標變數是指向函式的指標變數,只...

C語言隨筆(六)指標

指標,就是指記憶體位址,指標變數是用來存放記憶體位址的變數,不同型別的指標變數所占用的儲存單元長度是相同的,而存放資料的變數因資料的型別不同,所占用的儲存空間長度也不同。有了指標以後,不僅可以對資料本身,也可以對儲存資料的變數位址進行操作。定義指標 如下 int a 100 int p 定義乙個整型...