首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言指針進階:定義自增後移動到二維數組下一行的指針

     編輯:程式設計疑難解答

問題背景

在C語言中處理二維數組時,常需要一個指針在自增後自動跳轉到下一行。例如給定數組 int a[3][2] = {{1,2}, {3,4}, {5,6}};,如何定義一個指針使得 ptr++ 後指向下一行的首元素?

核心概念

二維數組在內存中按行主序連續存儲。數組名 a 的類型是「指向包含 2 個 int 的數組的指針」,即 int (*)[2]。因此 a + 1 會跨過整整一行(2 個 int)指向第二行。

正確定義方式

int (*ptr)[2] = a;  // ptr 指向第一行
ptr++;              // ptr 移動到第二行

此時 *ptr 相當於 a[1],即第二行的首地址。若需訪問第 j 列元素,可用 (*ptr)[j] 或 *(*(ptr) + j)。

常見誤區

  • int *p = a[0]; 這是指向第一個元素的指針,p++ 只會在行內移動,無法自動換行。
  • int **p; 這是指向指針的指針,不適用於靜態二維數組。

完整示例

#include <stdio.h>

int main() {
    int a[3][2] = {{1,2}, {3,4}, {5,6}};
    int (*ptr)[2] = a;  // 定義行指針

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", (*ptr)[j]);  // 訪問當前行第 j 列
        }
        printf("\n");
        ptr++;  // 移動到下一行
    }
    return 0;
}

總結

使用「指向一維數組的指針」即 int (*ptr)[N](N 為列數),配合 ptr++ 即可實現按行遍歷二維數組,這是 C 語言處理矩陣運算的標準技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved