簡體   English   中英

C語言中帶有字符串的指針

[英]pointers with strings in c programming

在下面的程序中,我期望printf語句能夠打印

a = b,b = a

但是,實際上是印刷

a = a,b = b

當我嘗試在函數中打印ab值時,它給出a=b,b=a:::I不明白為什么pass be reference不會影響實際參數。 我想念什么? 有人可以說明一下嗎?

void swap_pointers(char* a, char* b) {
    char* tmp = a;
    a = b;
    b = tmp;
}

int main() {
    char* a = "a";
    char* b = "b";
    swap_pointers(a, b);
    printf("a = %s, b = %s", a, b);
    return 0;
}

您僅在函數內更改函數參數的值。 如果要更改作為參數傳遞的指針存儲的地址,則需要將指針傳遞給該指針。

void swap_pointers(char** a, char** b) {
    char* tmp = *a;
    *a = *b;
    *b = tmp;
}

然后你這樣稱呼它

int main() {
    char* a = "a";
    char* b = "b";
    swap_pointers(&a, &b);
    printf("a = %s, b = %s", a, b);
    return 0;
}

什么是發生在這里,在功能你是 B 設置TMP的 ,然后 B 點的 ,該通過使用引用操作“*” TMP的。 而當你傳遞的int參數,要傳遞的地址和b 地址運算符“&”的地址 因此,您可以在函數中將(*)的值設置為(&)變量的地址。 該變量本身就是一個指針。

指針(“按引用傳遞”的“引用”)按值傳遞。 如果要更改引用,則需要通過引用傳遞引用: (char **a, char **b) ,並具有可以切換的指針到指針到字符的變量。 您的函數將用於交換這些指針的內容; 但是它本身不能交換指針。

#include <stdio.h>
void swap_pointers(char *a, char *b) {
    char tmp = *a;
    *a = *b;
    *b = tmp;
}



int main() {
    char a = 'a';
    char b = 'b';
    swap_pointers(&a,&b);
    printf("a = %c, b = %c", a, b);
    return 0;
}

嗯,這是一個非常簡單且基本的問題,與函數調用有關。

當您執行此操作swap_pointers(a, b);

它實際上將ab的副本傳遞給該函數;

確實會在函數內部交換。

但是,然后您在函數內部不執行任何操作,控件將返回到main

結果, main內部沒有進行任何更改。

這就是您所經歷的。 解決您的問題的方法是使用引用調用

因此,它已經由user2864740在注釋中建議,並由Dave在其答案中進行了解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM