C語言學習筆記 指標 指標與一維陣列

2021-09-01 16:09:51 字數 1917 閱讀 7217

int a[10];

int *p=null;

p=a;

其中,陣列名a代表陣列的首位址(即&a[0]),那麼表示式a+i代表陣列中下標為i元素a[i]的位址,即&a[i]

還可以通過使用間接定址*來引用陣列元素。例如:*(a+i)表示取出首位址元素後邊第i個元素的內容,即下標為i的元素a[i]

此外,還可以通過一維陣列的指標變數p來引用陣列a中的元素,*(p+i)就表示取出p+i所指的記憶體單元內容,即元素a[i]的值。*(p+i)也可以用它的下表形式p[i]來表示。

例如:

# include int main(void)

; int *p, *q, *r;

p = &a[3]; //第一種寫法

printf("*p = %d\n", *p);

q = a; //第二種寫法

q = q + 3;

printf("*q = %d\n", *q);

r = a; //第三種寫法

printf("*(r+3) = %d\n", *(r+3));

return 0;

}

輸出結果是:

*p = 4

*q = 4

*(r+3) = 4

注意:(1)與通過*(a+i)來引用陣列元素a[i]不同的是由於指標變數p不一定永遠都指向陣列元素的首位址&a[0],因此僅當指標變數p指向陣列元素首位址&a[0]時,*(p+i)才是對a[i]的引用,否則,如果通過增1運算改變指標變數p的指向,使p指向a[i],那麼*)就是對a[i]的引用。

(2)陣列名a是乙個位址常量,不能通過賦值操作改變它的值。指標變數p是乙個變數,可以通過賦值運算改變它的值,從而使p指向陣列中的其他元素。

(3)雖然p+1p++都指向當前指標所指向單元的下乙個元素但是p+1不改變當前指標的指向,而p++相當於執行p=p+1,因此p++操作改變了指標p的指向,表示指標變數p向前移動使其指向下乙個元素。

(4)p+1增加1*sizeof(指標的基型別)

例如:

# include int main(void)

; int *p = a;

printf("p = %d, p + 1 = %d\n", p, p+1);

return 0;

}

輸出結果是:

p = 1638196, p + 1 = 1638200

C語言學習筆記 指標 指標與二維陣列

在c語言中可將乙個二維陣列看成是由若干一維陣列構成的。如 int a 3 4 首先,可將二維陣列a看成是由a 0 a 1 a 2 三個元素組成的一維陣列,a是該一維陣列的陣列名,代表該一維陣列的首位址,即第乙個元素a 0 的位址 a 0 所以 a i 即為a i 注意這裡所謂的元素a 0 a 1 a...

C語言學習筆記 指標 指標陣列與陣列指標

指標陣列 是乙個陣列,陣列元素為指標 陣列指標 是乙個指標,指向陣列的指標 例如 int p1 5 int p2 5 對於語句int p1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣列的內容,即陣列的每個元素。也就是說,該陣列包...

c語言學習之指標與一維陣列

紅色的為2018 1 3之前還未接觸到 首先說指標,指標是乙個可以指向變數位址的特殊變數,它本身有位址,但主要是指向別的變數的指標,它所儲存的變數位址在32位系統下為4位元組,也就是說計算機分配乙個記憶體位址給指標,讓它去儲存別的變數的位址,還有就是它的型別是它所指向的變數的型別,比如 int i ...