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

C 語言指標作為函數參數:實現傳址呼叫與陣列處理

     編輯:C 語言基礎

C 語言函數參數可為指標,將外部地址傳入函數內部,使函數能操作外部資料,且資料不隨函數結束而銷毀。

經典案例:交換兩個變數值

錯誤的傳值呼叫:

void swap(int a, int b) { ... } // 僅交換副本,外部無影響

正確的傳址呼叫:

#include <stdio.h>
void swap(int *p1, int *p2) {
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
int main() {
    int a = 66, b = 99;
    swap(&a, &b); // 傳遞地址
    printf("a = %d, b = %d\n", a, b); // 99, 66
    return 0;
}

temp 至關重要,否則 *p1 = *p2 會覆蓋原值導致丟失。

陣列作為函數參數:必須傳遞指標

陣列無法整體傳遞,只能傳首元素地址:

int max(int *intArr, int len) {
    int maxValue = intArr[0];
    for (int i = 1; i < len; i++)
        if (maxValue < intArr[i]) maxValue = intArr[i];
    return maxValue;
}
  • 函數內無法從指標得知陣列長度,必須額外傳長度參數。
  • 形參寫 int intArr[6] 或 int intArr[] 皆為假象,編譯器仍視為 int *intArr。

為何 C 語言不支援整體陣列傳遞?

參數傳遞本質是記憶體拷貝。基本類型僅幾位元組,極快;陣列元素數量不定,拷貝可能極慢。為防止寫出低效程式碼,C 語言在語法層面禁止大塊記憶體直接拷貝。C++、Java、Python 等語言底層同樣採用指標/引用機制避免深拷貝。

完整範例:使用者輸入陣列尋找最大值

#include <stdio.h>
int max(int *intArr, int len) { ... }
int main() {
    int nums[6], i, len = sizeof(nums)/sizeof(int);
    for (i = 0; i < len; i++) scanf("%d", nums+i); // nums+i 為第 i 元素地址
    printf("Max value is %d!\n", max(nums, len));
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved