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

C語言指針數組實戰:指向字符串、一維與二維數組的靈活應用與記憶體映射圖解

     編輯:C 語言基礎

指針數組三大應用模式

  1. 字符串指針數組:char *ptr1[4] = {"china","chengdu","sichuan","chongqing"}; 各指針指向常量區字符串,ptr1[i] 直接作 %s 輸出。
  2. 一維數組元素指針數組:int a[3]={1,2,3}; int *ptr2[3]; for(i) ptr2[i]=&a[i]; 解引用 *ptr2[i] 獲取元素值。
  3. 二維數組行指針數組:int b[3][2]={...}; for(i) ptr2[i]=b[i]; ptr2[i] 指向第 i 行首元素,*(ptr2[i]+1) 取同行次元素。

記憶體映射關係

  • ptr1 陣列本身在棧/數據區,元素指向唯讀常量區字符串。
  • ptr2 元素指向 a 數組各元素或 b 數組各行首址(棧/數據區)。
  • 二維情況下 ptr2[i]+1 即同行下一列,利用行連續存儲特性。

完整可運行程式

#include 
#include 
main() {
    char *ptr1[4] = {"china","chengdu","sichuan","chongqing"};
    int i, *ptr2[3], a[3]={1,2,3}, b[3][2]={1,2,3,4,5,6};
    for(i=0;i<4;i++) printf("\n%s", ptr1[i]);
    for(i=0;i<3;i++) ptr2[i]=&a[i];
    for(i=0;i<3;i++) printf("%4d", *ptr2[i]);
    printf("\n");
    for(i=0;i<3;i++) ptr2[i]=b[i];
    for(i=0;i<3;i++) printf("%4d%4d\n", *ptr2[i], *(ptr2[i]+1));
}

輸出:四行字符串、一維陣列 1 2 3、二維陣列逐行兩列值。

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