1. 程式人生 > 其它 >C語言指標變數實現 交換swap

C語言指標變數實現 交換swap

技術標籤:C語言c語言

C語言指標變數實現 交換

不使用指標變數:

正確寫法

t=a;//正確的
a=b;
b=t;

錯誤寫法


#include<stdio.h>
int main()
{
	void swap(int x,int y);
	int *point_1,*point_2;
	int a,b;
	scanf("%d%d",&a,&b);
	swap(a,b);
	printf("%d %d",a,b);
	return 0;
}
void swap(int x,int y)//錯誤的
{
	int temp;
	temp=
x; x=y; y=temp; }

不能企圖通過改變指標形參的值而使指標實參的值改變,函式結束時,形參x,y已經釋放,而main函式中的a與b 並未互換,不能採取把要改變值的變數作為引數的辦法,可以使用指標變數作為函式引數,函式執行時將指標變數所指向的變數值發生變化

使用指標變數:

兩個數由大到小輸出


#include<stdio.h>
int main()
{
	void swap(int *p1,int *p2);
	int *point_1,*point_2;
	int *temp;
	int a,b;
	scanf("%d%d",&a,&
b); point_1=&a; point_2=&b; if(a<b) { temp=point_1; //使指向a與b的指標變數(地址)交換,a與b的值並未改變 point_1=point_2; point_2=temp; } printf("%d %d\n",a,b); printf("%d %d",*point_1,*point_2); //取地址交換後指標變數的內容 return 0; }

輸入a 與 b 的值分別為 3 和 6
在這裡插入圖片描述
定義swap函式實現

#include<stdio.h>
int
main() { void swap(int *p1,int *p2); int *point_1,*point_2; //定義兩個指標變數 int a,b; scanf("%d%d",&a,&b); point_1=&a; //使指標變數point_1指向a point_2=&b; //使指標變數point_2指向b if(a<b) swap(point_1,point_2); printf("%d %d",*point_1,*point_2); return 0; } void swap(int *p1,int *p2) //定義swap函式 { int temp; //定義一個整型變數temp作為臨時輔助變數實現a,b的交換 temp=*p1; //相當於 temp=a; *p1=*p2; //相當於 a=b; *p2=temp; //相當於 b=temp; 即指標變數中內容的交換 }

錯誤寫法:

void swap(int *p1,int *p2)
{
	int *temp;
	temp=p1;
	p1=p2;
	p2=temp;
}
在這裡插入程式碼片

C語言中實參變數與形參變數之間的資料傳遞是單向的“值傳遞”方式,不能通過執行呼叫函式來改變實參指標變數的值,只可以改變實參指標變數所指向變數的值,不能企圖通過改變指標形參的值而使指標實參的值改變