簡體   English   中英

使用指針交換變量。 有什么區別? (C 編程)

[英]Swapping the variables using pointers. What is the difference? (C Programming)

這兩個功能有什么區別? 你能通過一個例子來證明這一點嗎? 先感謝您。

一種是使用變量交換變量,另一種是使用指針做同樣的事情。 我被告知其中一個是錯誤的,但哪一個是錯誤的,為什么?

 void swap1(int x, int y) { int temp; temp = x; x = y; y = temp; } void swap2(int *p1, int *p2) { int temp; temp = *p1; *p1 = *p2; *p2 = temp; }

它與指針的概念有關。 考慮下面的程序(只是添加了一些信息性代碼):

#include <stdio.h>

void swap1(int x, int y) {
    printf("swap1 : xaddr = %p yaddr = %p\n", &x, &y);

    printf("swap1: %d %d\n", x, y);

    int temp;
    temp = x;
    x = y;
    y = temp;

    printf("swap1: %d %d\n", x, y);
}


void swap2(int *p1, int *p2) {
    printf("swap2 : xaddr = %p yaddr = %p\n", p1, p2);

    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main()
{
    int x = 10, y = 20;

    printf("main: xaddr = %p yaddr = %p\n", &x, &y);

    swap1(x, y);

    printf("main after swap1 : %d %d\n", x, y);

    swap2(&x, &y);

    printf("main after swap2: %d %d\n", x, y);

    return 0;
}

main 中的變量xy駐留在main()的本地 function 堆棧中,當swap1時,僅傳遞值的副本,而不是xy所在的實際地址。 因此,交換操作只發生在swap1的本地值之間。 而在swap2的情況下,實際地址正在被傳遞。 因此,您對該地址執行的任何操作也會反映在main()中。

Output:

main: xaddr = 0x7ffda2efc05c yaddr = 0x7ffda2efc058
swap1 : xaddr = 0x7ffda2efc02c yaddr = 0x7ffda2efc028
swap1: 10 20
swap1: 20 10
main after swap1 : 10 20
swap2 : xaddr = 0x7ffda2efc05c yaddr = 0x7ffda2efc058
main after swap2: 20 10

從output可以看出, mainxy的地址與swap1不同,swap操作確實發生在swap1中,但只是swap1的本地。 而在swap2中,我們在同一個地址上進行操作, main將其視為xy ,因此操作是永久性的。

暫無
暫無

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

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