C语言 显示数组元素的值和地址
生活随笔
收集整理的這篇文章主要介紹了
C语言 显示数组元素的值和地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <stdio.h>int main(void){int i;int a[5] = {1, 2, 3, 4, 5};int *p = a; // p指向a[0]for(i = 0; i < 5; i++){printf("a[%d] = %d *(a + %d) = %d | p[%d] = %d *(p + %d) = %d\n", i, a[i], i, *(a + i), i, p[i], i, *(p + i));}for(i = 0; i < 5; i++){printf("a[%d] = %p a + %d = %p | &p[%d] = %p p + %d = %p\n", i, &a[i], i, (a + i), i, &p[i], i, (p + i));}
}
運行結果:
運行結果:
數組正確指向數組中的元素
int a[5] = {1, 2, 3, 4, 5}; int *p = a; // p指向a[0]數組錯誤指向數組中的元素
int a[5] = {1, 2, 3, 4, 5}; int *p = a[2]; // 無法賦值因為:a[2]的類型是int,而p的類型是int *,兩者不同,不能相互賦值!
在以下兩種情況下,數組名不會被視為指向其實元素的指針。
- 作為 sizeof 運算符的操作數出現時
sizeof(數組名)不會生成指向起始元素的指針的長度,而是生成數組整體的長度。 - 作為取址運算符 & 的操作數出現時
& 數組名不是指向起始元素的指針的指針,而是指向數組整體的指針。
如果在指向數組內元素的指針p + i 前寫上指針運算符 *,會變成什么情況呢?
因為 p + i 是指向 p 所指元素后第 i 個元素的指針,所以在其前加上指針運算符后得到的 *(p + i)就是該元素的別名。因此,如果p指向a[0],那么表達式 *(p + i)就表示a[i]本身。
總結:
- 指針 p 指向數組中的元素e時,
指向元素 e 后第 i 個元素的 *(p + i),可以寫為p[ i ]。
指向元素 e 前第 i 個元素的 *(p - i),可以寫為p[-i]。 - 數組a的元素個數為n時,構成數組a的元素是a[0]到a[n-1],共“n個”。但是,指向數組元素的指針,則可以是&a[0]到&a[n],共“n + 1”個。之所以會出現這種情況,是因為在對遍歷數組元素的結束條件(是否達到了末尾)進行判定時,如果可以利用指向末尾元素后一個元素的指針的話將會非常方便。
- Type* 型指針 p 指向 Type型數組 a 的起始元素a[0]時,指針 p 的行為就和數組 a 本身一樣。
- 數組的下標表示位于起始元素后的第幾個元素的位置,因此必須從0開始。
注意:
- 雖然可以為指針加上整數,但是指針之間相減是不可以的。
- 指針之間做減法是可以的。
數組正確的賦值示例
int *p int x[5]; p = x; // 正確的賦值數組錯誤的賦值示例
int a[3] int b[3]; a = b; // 錯誤的賦值賦值表達式的左操作數不可以是數組名。
準確來說是 不可使用賦值運算符改變指向數組起始元素的指針。
總結
以上是生活随笔為你收集整理的C语言 显示数组元素的值和地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言 下标运算符和指针运算符
- 下一篇: C语言 排序