国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言指針操作(二)指針變量作為函數(shù)參數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了C語言指針操作(二)指針變量作為函數(shù)參數(shù)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

指針變量作為函數(shù)參數(shù)詳解,形參和實(shí)參之間的值傳遞如何傳遞?如何改變指針變量所指向的變量?

函數(shù)的參數(shù)不僅可以是整型,浮點(diǎn)型,字符型等數(shù)據(jù),還可以是指針類型;它的作用是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中。

關(guān)于地址,指針,指針變量可以參考一下這篇文章:

C語言指針操作(一)地址,指針,指針變量是什么

目錄

一、引入

1.1改變指針變量的值

1.2改變指針變量所指向的值

二、程序練習(xí)

2.1程序?qū)崿F(xiàn)

2.2程序分析


一、引入

我們先來看一個(gè)問題:輸入整數(shù) a 和 b,按大小先后順序輸出 a 和 b。

可以使用多種方法來處理這個(gè)這個(gè)問題

1.1改變指針變量的值

#include<stdio.h>
int main()
{
	int* p1, * p2, * p, a, b;	//定義指向整型的指針變量和整型變量
	printf("請輸入兩個(gè)整數(shù):");
	scanf_s("%d,%d", &a, &b);
	p1 = &a;	//賦予a的地址,指向變量a
	p2 = &b;	//賦予b的地址,指向變量b
	if (a < b)	//如果a<b,交換p1和p2
	{
		p = p1;
		p1 = p2;
		p2 = p;
	}
	printf("a=%d, b=%d\n", a, b);	//輸出a, b的值
	printf("max = %d, min = %d\n", *p1, *p2);	//輸出指針變量p1和p2所指向的變量值
	return 0;
}

判斷語句中也可以改為直接對 p1 和 p2 賦予新值,不用中間變量 p,使程序更加簡練。

{
	p1 = &b;
	p2 = &a;
}

運(yùn)行結(jié)果:

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

程序分析:

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

由圖可知,指針變量 p1 和 p2 的值發(fā)生了交換,而變量 a,b的值未發(fā)生交換。

這種算法是不交換原來變量的值,而是交換指針變量的值。

1.2改變指針變量所指向的值

用指針變量作為函數(shù)參數(shù)

#include<stdio.h>
int main()
{
	void swap(int* p1, int* p2);
	int* point_1, * point_2, a, b;	//定義指向整型的指針變量和整型變量
	printf("請輸入兩個(gè)整數(shù):");
	scanf_s("%d,%d", &a, &b);
	point_1 = &a;	//賦予a的地址
	point_2 = &b;	//賦予b的地址
	if (a < b)	//如果a<b,調(diào)用swap函數(shù)
	{
		swap(point_1, point_2);
	}
	printf("a=%d, b=%d\n", a, b);	//輸出a, b的值
	printf("max = %d, min = %d\n", *point_1, *point_2);	//輸出兩個(gè)指針變量的值所指向的變量值
	return 0;
}

void swap(int* p1, int* p2)	//自定義函數(shù),交換指針變量p1和p2
{
	int* temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
}

運(yùn)行結(jié)果:

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

程序分析:

由運(yùn)行結(jié)果我們可以看出:變量 a 和 b 未發(fā)生交換,指針變量 point_1 和 point_2 的值也沒有發(fā)生交換,那么函數(shù) swap 到底實(shí)現(xiàn)交換功能了嗎?我們將swap函數(shù)添加一個(gè)輸出語句看一下結(jié)果。

void swap(int* p1, int* p2)	//自定義函數(shù),交換指針變量p1和p2
{
	int* temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
	printf("*p1 = %d, *p2 = %d\n", *p1, *p2);
}

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

可知在swap函數(shù)中,*p1 = 8,*p2 = 5;實(shí)現(xiàn)了交換的功能,但沒有將改變的值傳回去。

結(jié)合函數(shù)調(diào)用的知識,我們可以知道調(diào)用函數(shù)時(shí),采取的是單向值傳遞,形參的改變不能使實(shí)參也隨之改變。

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

由圖可知,指針變量 point_1 和 point_2 的值沒有發(fā)生交換,那么他們指向的變量也沒有發(fā)生變化。

如果在函數(shù)中我們能使指針變量所指向的變量發(fā)生變化,那么就可以達(dá)到交換原變量的目的,此時(shí)而指針變量本身的值(即地址)不發(fā)生變換

我們對 swap 函數(shù)稍作修改,使它訪問到指針變量所指向的變量。

void swap(int* p1, int* p2)		//自定義函數(shù),交換指針變量所指向的變量*p1和*p2
{
	int temp;
	temp = *p1;		//交換*p1和*p2
	*p1 = *p2;
	*p2 = temp;
}

運(yùn)行結(jié)果:

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

程序分析:

從結(jié)果我們可以看出,變量 a 和 b 發(fā)生了交換,也就是指針變量 point_1 和 point_2 指向的變量發(fā)生了交換。

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

由圖可知,指針變量 point_1 和 point_2 的值(即地址 &a,&b)未發(fā)生變化,指針變量所指的變量(即變量 a,b)發(fā)生了變化。

這種算法是交換原來變量的值,而不交換指針變量的值。

這里需要注意的是中間變量 temp 的定義形式:

void swap(int* p1, int* p2)		//自定義函數(shù),交換指針變量所指向的變量*p1和*p2
{
	int* temp;          //指針變量temp
	*temp = *p1;		//交換*p1和*p2
	*p1 = *p2;
	*p2 = *temp;
}

這時(shí)程序雖然語法上沒有報(bào)錯(cuò),但編譯時(shí)會報(bào)錯(cuò),*p1 就是 a,是整型變量,而 *temp 是指針變量 temp 所指向的變量,由于未給 temp 賦值,因此temp的值是無法確定的,所以temp所指向的存儲單元也是未知的,因而 *temp = *p1 就是向一個(gè)未知的存儲單元賦值,這是不合法的。

總結(jié):

函數(shù)的調(diào)用只可以得到一個(gè)返回值,而使用指針變量作為參數(shù),可以得到多個(gè)變化了的值。

二、程序練習(xí)

輸入3個(gè)整數(shù) a,b,c,要求按大小順序?qū)⑺麄冚敵?,用函?shù)實(shí)現(xiàn)。

2.1程序?qū)崿F(xiàn)

#include<stdio.h>
int main()
{
	void exchange(int* q1, int* q2, int* q3);	//聲明函數(shù),后面需要調(diào)用
	int a, b, c, * point_1, * point_2, * point_3;
	printf("請輸入三個(gè)整數(shù):");
	scanf_s("%d,%d,%d", &a, &b, &c);
	point_1 = &a; point_2 = &b; point_3 = &c;
	exchange(point_1, point_2, point_3);
	printf("Max = %d, Mid = %d, Min = %d\n", a, b, c);
	return 0;
}

void exchange(int* q1, int* q2, int* q3)	//自定義函數(shù),交換3個(gè)變量的值
{
	void swap(int* p1, int* p2);		//聲明函數(shù),后面需要調(diào)用
	if (*q1 < *q2) { swap(q1, q2); }
	if (*q1 < *q3) { swap(q1, q3); }
	if (*q2 < *q3) { swap(q2, q3); }
}

void swap(int* p1, int* p2)		//自定義函數(shù),交換指針變量所指向的變量*p1和*p2
{
	int temp;
	temp = *p1;		//交換*p1和*p2
	*p1 = *p2;
	*p2 = temp;
}

指針作為函數(shù)參數(shù),C語言,c語言,算法,c++,數(shù)據(jù)結(jié)構(gòu),指針

2.2程序分析

exchange 函數(shù)的作用是對3個(gè)數(shù)按大小排序,在執(zhí)行 exchange 函數(shù)過程中,要嵌套調(diào)用 swap 函數(shù),swap 函數(shù)的作用是對兩個(gè)數(shù)按大小排序,通過調(diào)用 swap 函數(shù)(最多調(diào)用3次)實(shí)現(xiàn)3個(gè)數(shù)的排序。

主函數(shù)中3個(gè)指針變量的值未發(fā)生改變,3個(gè)指針變量所指向的變量的值發(fā)生了改變。

要熟練掌握指針變量和指針變量所指向變量之間的關(guān)系,避免混淆!

C語言指針操作系列文章:

C語言指針操作(一)地址,指針,指針變量是什么

C語言指針操作(二)指針變量作為函數(shù)參數(shù)

C語言指針操作(三)通過指針引用數(shù)組

C語言指針操作(四)用數(shù)組名作函數(shù)參數(shù)

C語言指針操作(五)通過指針引用多維數(shù)組

C語言指針操作(六)通過指針引用字符串

C語言指針操作(七)指向函數(shù)的指針

C語言指針操作(八)返回指針值的函數(shù)

C語言指針操作(九)指針數(shù)組和多重指針

C語言指針操作(十)動態(tài)內(nèi)存分配與指向它的指針變量

C語言指針操作(十一)有關(guān)指針的小結(jié)文章來源地址http://www.zghlxwxcb.cn/news/detail-759413.html

到了這里,關(guān)于C語言指針操作(二)指針變量作為函數(shù)參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包