一維陣列和陣列元素的位址

2021-08-04 07:44:55 字數 1214 閱讀 1256

一維陣列和陣列元素的位址

前言:定義的陣列名可以認為是乙個存放位址值的指標變數名,其中的位址是陣列第乙個元素的位址,也就是陣列所佔一串連續儲存單元的起始位址。重要的是:這個指標變數中的位址值不可改變,也就是說,不可以給陣列重新複製。因此,也可以認為陣列名是乙個位址常量。

如:float a[10],*p,x;

語句 a = &x; 或者 a++;這樣的語句是非法的。因為不能給a重新賦位址值。一旦定義a永遠指向a陣列的首位址。

雖然不可以改變陣列名a中的內容,但可以對陣列名加乙個整數的辦法,來依次表達該陣列中不同的元素位址。

如: int a[10],*p; p=a+4 也就是--> p =&a[4];

再如:for(k = 0;k<10;k++)

p=a+k;

p++;或a+k(k的值是不斷變化的如上面的for語句一樣)

通過陣列的首位址引用陣列元素

a是陣列元素的首位址,a(即a+0)的是即等於&a[0],則用a+1的值等於&a[1]。 在以前我們學過「間接訪問運算子」-----「 * 」來引用位址所佔的儲存單元,因此,對於陣列a[0],可以用表示式*&a[0]來引用也可以用*(a+0),還可以用a[0]來表示。但需要注意的是對於*(p+k)這樣的表示式不能寫*p+k,這樣寫的話就錯了。代表指標取值後再加k的值了。

總結:表示陣列元素s[i] 的表示式應當有

s[i] *(s+i) *(p+i) *p[i]此時的p是指向s的首位址

例題:編寫程式:通過給乙個函式給主函式中定義的陣列輸入若干個大於等於0的整數,用負數作為輸入結束標誌,呼叫另乙個函式中陣列中的資料

#include

#define m 100

void arrout(int *,int);

int arrin(int *);

int main()

int arrin(int *a)

return i;

}void arrout(int *a,int n)

{ int i;

for(i=0;i當陣列名作為實參時,對於的形參除了是指標wait,還可以用另外兩種形式。當上面的提莫中陣列名作為實參時,函式的首部用的是指標(*a),還可以用以下形式呼叫:

arrin(int *a)

arrint(int a)//中不傳值,可以理解為自適應

arrint (int a[m]) //m指具體陣列長度,基本不使用陣列這種方式,因為如果m的值穿小了,會造成溢位。

二維陣列和陣列元素位址

二維陣列和陣列元素的位址 先給出一下定義 int p,a 3 4 1.二維陣列a由若干個以為陣列組成 像上面定義的陣列a,我們可以理解為由a 0 a 1 a 2 三個元素組成,而他們有分別是乙個一維陣列 通過我們前面學過的知識可以知道,陣列名是乙個位址,其值是第乙個元素的位址,而此位址的基型別就是陣...

C C 陣列首元素的位址和陣列位址的區別

1 首先陣列首元素的位址和陣列位址的值是相等的。2 陣列首元素的位址和陣列位址是兩個不同的概念。3 舉例如下 includevoid main printf d n a printf d n a 1 與前面乙個相差4 printf d n a printf d n a 1 與前面乙個相差40 輸出結...

有關陣列首元素位址和陣列本身

陣列在兩種情況下代表陣列本身 即該段連續空間 1.對陣列名進行取位址 2.陣列名出現在sizeof之後 其餘陣列名表示首元素位址 比如 函式傳參 int int p1 array int p2 array 0 int p3 array 0 等價 char p3 null 0 void 0 數值上相等...