C語言指標與陣列的一些基本知識

2021-09-25 11:32:36 字數 1990 閱讀 5888

我還是乙個初學者,今天看了一天的書,總結了如下知識點。

指標與陣列

int *p ;

p = &a;

*p = 1;

指標:指標就是乙個位址,指標變數是存放位址的變數,指標變數的值就是指標p指向那個元素的位址。

p = &a; //把a的位址賦給指標變數p

指標變數p的值就是a的位址,p指向a

printf(「%d」,*p)

輸出指標變數p所指向變數的值,即a的值。

*p = 1;

將1賦給p所指向的變數,如果p指向a,則a=1;

p.230 通過指標引用陣列

int a[10];

int *p;

p = &a[0]; //p的值就是a[0]的位址

p = a; //p的值就是陣列a首元素的位址

在定義指標變數時對他初始化: int p = &a[0];

等效於下面兩行:

int p;

p = &a[0] //不能寫成p = &a[0],因為p是乙個值,而不是位址。

當然定義時也可以寫成int *p = a; //其作用是將陣列a首元素(即a[0])的位址賦給指標變數p,而不是把陣列a的各元素賦給p

在指標指向陣列元素時,可以對指標進行如下運算。

p + 1;

p - 1;

p+1指向同一陣列中的下乙個元素,p-1指向同一陣列中的上乙個元素。

執行p+1時,例如陣列元素是int型,p+1意味著使p的值加4個位元組,以使他指向下乙個元素,p+1代表的位址實際為p+1*d,d是

乙個元素所佔的位元組數(v c++ 6.0中,int,float,long型均為4位元組,char為1位元組),若p的值為2000,則p+1為2004.

p++,p–

++p,–p

如果p原來指向a[0],++p後,p指向a[1]。

p1 - p2

兩指標相減(只有在p1和p2都指向同一陣列裡的元素時才有意義)。

如執行p2-p1,結果是p2-p1的值(兩位址之差)再除以陣列元素的長度。如果p2指向int型陣列元素a[3],p1指向int型陣列元素a[1],

p2的值為2020,p1的值為2012,則p2-p1的結果是(2020=2012)/4=2,這個結果表示p2和p1之間差2個元素。

兩位址不能相加,p1+p2是無意義的。

如果p的初值為a[0],則p+i和a+i就是陣列元素a[i]的位址,注意a代表首元素的位址,a+1也是位址,計算方法同p+1

例如p+9和a+9的值是&a[9],它指向a[9]。

(p+i)和(a+i)是p+i和a+i所指向的陣列元素a[i]。例*(p+5)和*(a+5)就是a[5]。

根據以上所述,引用乙個陣列元素有兩個方法

1.下標法,如a[i];

2.指標法,如*(a+i)或*(p+i),a是陣列名,p是指向a的指標變數,其初值p=a;

舉個例子,有乙個元素個數為10的整型陣列a[10[,要求輸出其中全部元素。

#include

int main()

for(p = a;p<(a+10);p++)

return 0;

}第二個for迴圈中先使指標變數p指向a的首元素a[0],然後用輸出函式輸出p,*p就是a[0]的值。然後執行p++,使p指向下乙個元素

a[1],再輸出其值。

利用指標引用陣列元素也有一些技巧,且看下面的例子。

1.p++;

p;p++使p指向下乙個元素,然後再執行p,得到下乙個元素a[1]的值。

2.p++;

這裡要注意,和++同優先順序,結合方向自右而左,所以相當於(p++),先實現p的運算,再使p自增1.

3.++p

這裡等價於(++p),注意,這裡使先讓p自增1,再實現p。

若p得初值為a(即&a[0]),若輸出(p++),則得到a[0]的值,若輸出*(++p),則得到a[1]的值。

4.++(p)

這裡是先執行p的運算,再使運算的結果值+1,如果p = a,則是a[0]的值加1。

c 中與指標相關一些基本知識

1 我們知道變數的定義基本形式是 型別說明符 乙個或者多個識別符號列表 以逗號隔開 結束。例如 int a int mouth,day,year double price 等等。2 那麼指標的定義呢?在c 語言中,使用 符號把乙個標示符宣告為指標,例如 int p1,p2 string pstrin...

C語言一些基本知識整理

c語言中,資料型別分為基本資料型別 構造資料型別 指標型別和void型別4種型別。計算機的記憶體結構是以位元組為單位進行儲存分配的,每個位元組都用乙個實體地址來唯一標識,系統根據所定義的變數的資料型別為其分配相應的儲存空間。對於32位機,字元型佔1個位元組,基本整型佔4個位元組,短整型佔2個位元組,...

framebuffer 一些基本知識

horizontal回掃和vertical回掃是crt引入的概念,電子束從左向右畫水平線,回到下一行行首繼續下一行掃瞄,直到螢幕最下一行,然後回到螢幕上方繼續下一幀掃瞄。水平回掃 電子束從上一行尾移動到下一行起始點需要的時間 幀回掃 電子束從螢幕下方移動到螢幕上方所需的時間 crt的重新整理屏率是怎...