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

C語言指針與二維數組關系題目解析:指針變量可指向一維數組

     編輯:C 語言問答

題目還原

已知 int a[3][4],int *p。下列敘述正確的是?

A. p 可以指向一維數組和一個變量

B. p 只能指向一維數組

C. p 只能指向一個變量

D. p 不能指向 a[1]

正確答案:A

詳細解析

概念類型可賦值給 int *p?理由
整型變量int x✅ 是p = &x; 取地址類型匹配
一維數組int arr[4]✅ 是數組名退化為指向首元素的指針 int*
二維數組的一行a[1] (類型 int[4])✅ 是a[1] 退化為 int*,指向第 1 行首元素
二維數組整體a (類型 int[3][4])❌ 否&a 類型為 int(*)[4] (指向數組的指針),非 int*
二維數組首行首元素&a[0][0]✅ 是類型 int*

代碼驗證

#include <stdio.h>
int main() {
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;
    int x = 99;

    p = &x;           // 指向單個變量 ✅
    printf("p=&x: %d\n", *p);

    p = a[1];         // 指向二維數組第 1 行 (一維數組) ✅
    printf("p=a[1]: %d %d %d %d\n", p[0], p[1], p[2], p[3]); // 輸出 5 6 7 8

    // p = a;        // ❌ 編譯警告/錯誤: assignment from incompatible pointer type
    // 正確寫法: int (*q)[4] = a; // 指向含 4 個 int 的數組的指針

    return 0;
}

核心知識點:數組退化規則

  1. 一維數組 int arr[N] → 表達式中 (除 sizeof、&、字符串字面量初始化) **退化為 int***,指向 arr[0]。
  2. 二維數組 int a[M][N]:
    • a 退化為 int(*)[N] (指向「含 N 個 int 的數組」的指針)。
    • a[i] 退化為 int* (指向第 i 行首元素)。
    • &a 類型 int(*)[M][N] (指向整個二維數組)。

總結

int *p 可以指向**單個 int 變量**或**任何 int 類型的一維數組首元素** (包括二維數組的某一行)。選項 A 「p 可以指向一維數組和一個變量」準確涵蓋這兩種合法情況,為正確答案。

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