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

C語言字符串指針、函數指針、指針函數與指針數組深度解析

     編輯:關於C語言

字符串指針 vs 字符數組

特性字符指針字符數組
本質變量,存地址數組,存內容
初始化char *p = "str"; 無限制需 static/外部
賦值p = "str"; 合法需逐元素或 strcpy
修改內容不可(指向常量區)可修改

函數指針變量

返回類型 (*指針名)(); // 如 int (*pf)();

調用三步驟

  1. 聲明:int (*pmax)();
  2. 賦值函數地址:pmax = max;
  3. 調用:z = (*pmax)(x, y);

限制:不可算術運算;括號不可省。

指針型函數

返回類型 *函數名(參數) { ... }
// 如 int *ap(int x, int y)

返回指針值,類型說明符指明指向的數據類型。

示例:返回星期字符串指針

char *day_name(int n) {
    static char *name[] = {"Illegal day","Monday",...,"Sunday"};
    return (n<1||n>7) ? name[0] : name[n];
}

關鍵區別:聲明語法

int (*p)(); // 函數指針變量
int *p();   // 指針型函數聲明

前者括號綁定 *p,後者 * 綁定返回類型。

指針數組

char *ps[] = {"BASIC","DBASE","C","FORTRAN","PASCAL"}; // 字符串指針數組
int *pi[10]; // 整型指針數組
  • 所有元素同類型指針
  • 常用:字符串表、函數指針表(命令分發、狀態機)

字符串拷貝函數演進

// 基礎版
while ((*pds++ = *pss++) != '\0');

// 極簡版(利用 \0 為 0 假值)
void cpystr(char *pss, char *pds) {
    while (*pds++ = *pss++);
}

指針相關概念是 C 語言靈活性的核心,區分指針變量、指針函數、函數指針、指針數組對於高級編程至關重要。

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