1. 程式人生 > >索引法和指標法訪問陣列

索引法和指標法訪問陣列

訪問陣列有兩種形式:

1. 通過陣列名和索引組合訪問陣列元素

2. 通過指標變數運算元組元素,陣列中各個元素在記憶體中都是相鄰排列的,

相鄰元素的地址只相差一個元素的字長,所以可以通過一個數組元素型指標

加上要訪問陣列元素的地址偏移量即可獲取該元素地址,根據地址就能獲取對應記憶體的值。

eg:

#include <stdio.h>
#define SIZE 10

int main(void){
    char a_ch[SIZE] = "student"; /* 定義並初始化a_ch */
    int a_int[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; /* 定義並初始化a_int */

    /* 定義並初始化兩個陣列元素型指標 */
    char * p_ch = a_ch;
    char * p_int = a_int;

    printf("a_ch[4] = %c, a_ch[3] = %c\n", a_ch[4], a_ch[3]); /* 使用索引法輸出元素 */
    printf("&a_ch[4] = %p, &a_ch[3] = %p\n", &a_ch[4], &a_ch[3]); /* 使用索引法輸出兩個元素地址 */
    printf("&a_ch[4] - &a_ch[3] = %d\n", &a_ch[4]-&a_ch[3]); /* 使用索引法輸出兩個元素之間的地址偏移量 */

    printf("a_int[4] = %d, a_int[3] = %d\n", a_int[4], a_int[3]); /* 使用索引法輸出元素 */
    printf("&a_int[4] = %p, &a_int[3] = %p\n", &a_int[4], &a_int[3]); /* 使用索引法輸出兩個元素地址 */
    printf("&a_int[4] - &a_int[3] = %d\n", &a_int[4]-&a_int[3]); /* 使用索引法輸出兩個元素之間的地址偏移量 */

    /* 使用指標法輸出兩個元素的地址 */
    printf("p_ch + 4 = %p, p_ch + 3 = %p\n", p_ch + 4, p_ch + 3);
    printf("p_int + 4 = %p, p_int + 3 = %p\n", p_int + 4, p_int + 3);

    /* 使用陣列名+地址偏移量組合訪問陣列元素 */
    printf("%d\n", *(a_int + 2)); /* 等價於a_int[2]獲取的值 */
}

執行結果: