C 語言中將指標傳遞給函數

你好,有抱負的程式設計師!今天,我們將進入C語言的奇妙世界,特別是關於將指標傳遞給函數。如果你是新手,也別擔心;我會像一位經驗豐富的老師一樣,引導你逐步掌握這些概念。那麼,讓我們開始吧!

C - Passing Pointers to Functions

將指標傳遞給函數的好處

在我們開始撰寫代碼之前,先來了解為什麼在C語言中將指標傳遞給函數如此重要。想像你正在與朋友分享食譜。你並不是給他整本烹飪書,而是只告訴他頁碼。這就是我們使用指標的方式!

以下是一些主要的好處:

  1. 記憶體效率:傳遞指標就像提供方向而不是整張地圖一樣。它使用的記憶體較少,因為我們只是傳遞地址,而不是整個數據。

  2. 速度:傳遞一個小的地址比傳遞一個大的數據塊要快。

  3. 能夠修改原始數據:當你傳遞一個指標時,函數可以直接訪問並修改原始數據。

  4. 處理大型數據結構:對於如陣列或結構體這樣的大型數據結構,傳遞指標要有效得多。

將指標傳遞給函數的例子

讓我們從一個簡單的例子來看看這是如何實際工作的:

#include <stdio.h>

void modifyValue(int *ptr) {
*ptr = 100;
}

int main() {
int num = 10;
printf("修改前: %d\n", num);

modifyValue(&num);
printf("修改後: %d\n", num);

return 0;
}

在這個例子中,我們將num的地址傳遞給modifyValue函數。然後函數改變該地址的值為100。當我們運行這個程序時,我們將看到:

修改前: 10
修改後: 100

很驚訝吧?我們剛剛從另一個函數中修改了main函數中的變量!

通過傳遞指標交換值

現在,讓我們來解決一個經典的程式設計問題:交換兩個值。這裡指標真的發光!

#include <stdio.h>

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int main() {
int x = 5, y = 10;
printf("交換前: x = %d, y = %d\n", x, y);

swap(&x, &y);
printf("交換後: x = %d, y = %d\n", x, y);

return 0;
}

在這裡,我們的swap函數接收兩個整數的指標。然後它使用這些指標來交換值。輸出將會是:

交換前: x = 5, y = 10
交換後: x = 10, y = 5

這就像魔法一樣,但其實只是指標的力量!

將陣列指標傳遞給函數

在C語言中,陣列和指標是緊密相關的。當我們將陣列傳遞給函數時,我們實際上是傳遞指向其第一個元素的指標。讓我們看看這是如何實作的:

#include <stdio.h>

void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);

printf("陣列元素為: ");
printArray(numbers, size);

return 0;
}

在這個例子中,numbers在傳遞給printArray時自動轉換為指標。輸出將會是:

陣列元素為: 1 2 3 4 5

將字符串指標傳遞給函數

在C語言中,字符串只是字符的陣列,所以傳遞字符串指標的方式與傳遞陣列指標類似。這裡有一個例子:

#include <stdio.h>

void printString(char *str) {
while (*str != '\0') {
printf("%c", *str);
str++;
}
printf("\n");
}

int main() {
char greeting[] = "Hello, World!";
printf("問候語為: ");
printString(greeting);

return 0;
}

這將輸出:

問候語為: Hello, World!

將結構體指標傳遞給函數

最後,讓我們看看如何傳遞結構體的指標。當處理大型結構時,這特別有用:

#include <stdio.h>

struct Person {
char name[50];
int age;
};

void birthday(struct Person *p) {
p->age++;
}

int main() {
struct Person john = {"John Doe", 25};

printf("生日前: %s 是 %d 歲\n", john.name, john.age);

birthday(&john);

printf("生日後: %s 是 %d 歲\n", john.name, john.age);

return 0;
}

在這個例子中,我們將指向Person結構的指標傳遞給birthday函數。然後函數增加人的年齡。輸出將會是:

生日前: John Doe 是 25 歲
生日後: John Doe 是 26 歲

以上就是這一切的內容!我們已經涵蓋了在C語言中將指標傳遞給函數的基本知識。記住,練習成就完美,所以不要害怕實驗這些概念。開心編程!

方法 描述 示例
傳遞基本指標 傳遞變量的地址以直接修改它們 void modifyValue(int *ptr)
交換值 使用指標在兩個變量之間交換值 void swap(int *a, int *b)
傳遞陣列指標 有效地在函數之間傳遞陣列 void printArray(int *arr, int size)
傳遞字符串指標 在函數中處理字符串 void printString(char *str)
傳遞結構體指標 高效地修改複雜的數據結構 void birthday(struct Person *p)

Credits: Image by storyset