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

C語言多維數組指針、字符串指針應用與指針作函數參數

     編輯:關於C語言

二維數組指針聲明

int (*p)[4]; // 指向包含 4 個 int 的數組的指針
// 括號不可省:int *p[4] 是指針數組!

操作等價形式

  • p = a; — 指向二維數組 a
  • p + i — 指向第 i 行
  • *(*(p+i)+j) — 第 i 行第 j 列元素值

遍歷輸出示例

static int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
int (*p)[4] = a;
for (int i=0; i<3; i++)
    for (int j=0; j<4; j++)
        printf("%2d ", *(*(p+i)+j));

字符串指針聲明與使用

char *ps = "C Language";
printf("%s", ps); // 輸出整串

ps += 10; // 指向第 11 字符
printf("%s", ps); // 輸出 "book" (from "this is a book")

指針指向數組緩衝區

char st[20], *ps = st;
scanf("%s", ps); // 等價 scanf("%s", st)
for (int i=0; ps[i]!='\0'; i++)
    if (ps[i]=='k') { found; break; }

指針作 printf 格式串

char *PF = "%d,%d,%d,%d,%d\n";
printf(PF, a, *a, a[0], &a[0], &a[0][0]);
// 輸出各種地址表示驗證等價性

指針作函數參數:字符串拷貝

void cpystr(char *pss, char *pds) {
    while ((*pds++ = *pss++) != '\0');
}

main() {
    char *pa = "CHINA", b[10], *pb = b;
    cpystr(pa, pb);
    printf("string a=%s\nstring b=%s\n", pa, pb);
}

極簡版本(利用 \0 為假值)

void cpystr(char *pss, char *pds) {
    while (*pds++ = *pss++);
}

地址等價性驗證

printf("%d,%d\n", a[1]+1, *(a+1)+1);     // 地址值相同
printf("%d,%d\n", *(a[1]+1), *(*(a+1)+1)); // 元素值相同

指針作函數參數實現「傳址調用」,是 C 語言模擬引用傳遞、操作調用者內存、處理動態數據結構的基石。

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