c語言之指向二維數組元素的指針變量


如何使用指針對二維數組進行遍歷?

首先我們需要明確的是:二維數組在內存中是連續的,比如一個二維數組int a[2][3]={1,2,3,4,5,6},可以視作是兩個一維數組構成的,即int a0[3] ={1,2,3},int a1[3] = {4,5,6},我們知道,一維數組在內存中是連續的一塊內存,並且數組名a0,a1代表的就是該數組首元素的地址,而正因為二維數組的內存中的地址也是連續的,所以a1的首元素的地址就為a0數組首元素的地址+a0中元素的個數,因此,我們就可以通過讓指針不斷+1來訪問其中的每一個元素,不用再考慮行與列的限制。

#include<stdio.h>
#include<iostream>

//利用指針來遍歷二維數組
void printArr(int *p,int m,int n) {
    for (int i = 0; i < (m * n); i++) {
        if (i != 0 && i % n == 0) {
            printf("\n");
        }
        printf("%d ", *(p + i));
    }
    putchar('\n');
}

int main() {
    int a[2][3] = { {1,2,3},{4,5,6} };
    int m = sizeof(a) / sizeof(a[0]);
    int n = sizeof(a[0]) / sizeof(a[0][0]);
    printf("數組的行:%d 數組的列:%d\n",m, n);
    printArr(a[0],m,n);
    system("pause");
    return 0;
}

輸出:

 需要注意以下幾點:

(1)使用int m = sizeof(a) / sizeof(a[0]); int n = sizeof(a[0]) / sizeof(a[0][0]);來獲取數組的行與列。

(2)傳入printArr中的是二維數組首元素的地址,也就是第一個一維數組的首元素的地址,也就是其名字。

(3)遍歷時讓指針p一直向后移動到二維數組的末尾,可以看做將二維數組展開成一維數組,再計算移動的次數。

(4)當訪問到的位置是列的整數倍時,進行換行,方便顯示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM