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

C語言指針原理(26) - 字符串常量、函數指針、命令行參數

     編輯:關於C

1. 字符串常量與指針算術

字符串字面量存儲在只讀數據段,類型為 const char[],退化為 const char*。指針算術可直接偏移:

printf("%s", "abcdefgh" + 2); // 輸出 "cdefgh"
// 等價於
const char *p = "abcdefgh";
printf("%s", p + 2);

注意:不可修改字符串常量內容,會導致未定義行為(段錯誤)。

2. 函數指針

聲明語法

返回類型 (*指針變量名)(參數列表);

基本用法

int add(int a, int b) { return a + b; }

int main() {
    int (*myfunc)(int, int); // 聲明
    myfunc = add;            // 賦值(函數名隱式轉指針)
    int x = myfunc(12, 36);  // 調用
    printf("%d\n", x);       // 48
    return 0;
}

函數指針數組

int (*ops[])(int, int) = { add, sub, mul, div };
// 調用:ops[0](3, 4) → 7

3. 命令行參數

main 簽名

int main(int argc, char **argv)
int main(int argc, char *argv[]) // 等價
  • argc:參數個數,含程序名本身,最小為 1。
  • argv[0]:程序名(含路徑)。
  • argv[argc] 保證為 NULL。

遍歷參數(不使用 argc)

while (*++argv != NULL)
    printf("%s\n", *argv);

結合函數指針數組的簡易計算器

#include <stdio.h>
#include <stdlib.h>

int add(int a,int b){ return a+b; }
int sub(int a,int b){ return a-b; }

int main(int argc, char **argv) {
    int (*ops[])(int,int) = { add, sub };
    int op = atoi(*++argv);      // 第一個參數:操作碼 0/1
    int result = 0;
    while (*++argv != NULL) {    // 後續參數:操作數
        int val = atoi(*argv);
        result = ops[op](result, val);
    }
    printf("%d\n", result);
    return 0;
}
// 測試:
// ./calc 0 1 13 52  → 66 (add)
// ./calc 1 1 13 52  → -66 (sub)

4. 總結

主題關鍵點
字符串常量只讀、指針算術偏移、不可修改
函數指針聲明返回類型 (*名)(參數)
函數指針賦值函數名、&函數名 均可
函數指針調用*fp()、fp() 等價
argc/argvargc≥1,argv[argc]==NULL
argv 遍歷while(*++argv) 跳過程序名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved