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

C語言指針數組與二維數組指針深度解析:字符串處理與排序實戰

     編輯:關於C語言

指針數組基礎

指針數組聲明形式:類型 *數組名[長度]。例如 int *pa[3] 表示含 3 個指向整型指針的數組。常用於指向二維數組:各元素存儲二維數組每行首地址,可視為指向一維數組。

int a[3][3] = {1,2,3,4,5,6,7,8,9};
int *pa[3] = {a[0], a[1], a[2]};
int *p = a[0];

元素訪問的多種等價形式

對二維數組 a 與指針數組 pa:

  • *a[i] → 第 i 行第 0 列
  • *(*(a+i)+i) → 第 i 行第 i 列
  • *pa[i] → 第 i 行第 0 列
  • p[i] / *(p+i) → 第 0 行第 i 列(因 p=a[0])

指針數組 vs 二維數組指針變量

特性指針數組二維數組指針
本質多個指針的集合單個指針變量
聲明形式int *p[3]int (*p)[3](括號不可省)
含義3 個指針變量:p[0]、p[1]、p[2]指向列數為 3 的二維數組

指針數組管理字符串

初始化極簡:

char *name[] = {
    "Illegal day",
    "Monday", "Tuesday", "Wednesday",
    "Thursday", "Friday", "Saturday", "Sunday"
};

name[0] 指向 "Illegal day",name[1] 指向 "Monday"……

指針數組作函數參數:高效字符串排序

傳統排序需交換字符串內容,開銷大。指針數組僅交換指針值(地址),大幅提升效率。

#include <string.h>

void sort(char *name[], int n) {
    char *pt;
    int i, j, k;
    for (i = 0; i < n-1; i++) {
        k = i;
        for (j = i+1; j < n; j++)
            if (strcmp(name[k], name[j]) > 0) k = j;
        if (k != i) {
            pt = name[i];
            name[i] = name[k];
            name[k] = pt;
        }
    }
}

void print(char *name[], int n) {
    for (int i = 0; i < n; i++) printf("%s\n", name[i]);
}

int main() {
    char *name[] = {"CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
    int n = 5;
    sort(name, n);
    print(name, n);
    return 0;
}

strcmp 直接接受指針參數比較字符串;交換時僅移動指針,避免內存複製,顯著降低時間開銷。

總結

指針數組是處理字符串集合、二維數組行訪問、函數參數傳遞的利器。理解其與二維數組指針的區別,善用指針交換替代數據移動,能編寫出高效、優雅的C代碼。

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