當前位置:首頁 » 編程語言 » c語言交換地址能實現數據交換么
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言交換地址能實現數據交換么

發布時間: 2023-05-13 12:22:24

⑴ 用c語言實現從a到b的數據交換(不能使用第三個寄存器)

兩個數交換應該有兩種方法:一種是交換它們所指的地址,一種是交換它們的值。

從你的int *t=a;看你把a的地址先保存,應該是想交換他們的地址達到交換兩數的目的。但要改變指針所指向的地址需要用二級指針(自已可以仔細理解下),所以你應該這樣寫才是交換他們的地址:
void swap( int **a, int **b)
{
int *t= *a;
*a= *b;
*b= t;
}
上面這個函數調用有點麻煩:
int x=9,y=0;
int *p1= &x;
int *p2= &y;
swap( &p1, &p2);

如果是交換地址所指向的地址的內容用一級指針就可以了。
void swap( int *a, int *b)
{
int t=*a;
*a= *b;
*b=t;
}
這種調用也很簡單
int x, y;
swap( &x, &y);

⑵ c語言怎麼實現兩個數據交換

將兩個數進行互換的方法有兩種形式:
1、藉助中間變數完成,此方法直觀,易理解,使用最多
2、不需要中間變數,通過變數身的運算完成交換。

⑶ 5、使用C語言編寫一個函數,用於交換兩個變數的值(地址傳遞)。

不知道你要交換的兩個變數類型,所以這里以整型數據交換為例,以下swap函數實現了交換兩個整型變數值的功能:

#include<stdio.h>

//交換給定指針指向整型變數的值。
//參數:
// a->指向第一個變數的指針
// b->指向第二個變數的指針
voidswap(int*a,int*b);

intmain(intargc,intargv)
{
inta=3,b=5;
printf_s("交換前:a=%d,b=%d ",a,b);
swap(&a,&b);
printf_s("交換後:a=%d,b=%d ",a,b);
return0;
}

//交換給定指針指向整型變數的值。
//參數:
// a->指向第一個變數的指針
// b->指向第二個變數的指針
voidswap(int*a,int*b)
{
//聲明一個臨時變數,保存第一個指針指向變數
//的值。
//其中*a是取出a指針指向變數的值
inttemp=*a;
//將b指針指向的值賦值給a指針指向變數
(*a)=(*b);
//將臨時變數temp中保存的a指針指向變數的值賦值給
//b指針指向的變數。
(*b)=temp;
}

以上代碼運行結果如下:

⑷ c語言交換兩個數的問題

兩段代碼的差異是:

第一段代碼:將a、b兩個數的地址傳入swap()函數,此函數內部拿著這兩個數的地址,將兩個地址下的值做了交換;

第二段代碼:將a、b兩個數的地址傳入swap()函數,此函數內部將這兩個地址彼此做了交換(即兩個指針所指的地址發生了互換,但相應地址下的數並沒有變化)。因為對於函數swap()來說,傳入的兩個地址是值傳遞形式的,在其內部是局部作用域下的兩個變數,完成這兩個地址「值」的交換,並不能對調用時的實參產生影響。故而交換失敗。


另外,再給你個無需中間變數交換兩個數值的寫法:

a = b - a + (b = a); // 無需中間變數交換a、b的值

⑸ C語言指針實現數據交換

void swap(int *x,int *y) x,y是地址

temp = *x; //temp的值是x地址指向的值

這么理解就明白了。

int a;
int *a2;
a = 5;
a2=&a;
*a2 = 6;
運行到這里a就是等於6,有沒有明白呢。