因?yàn)榈谝粋€(gè)參數(shù)是地址傳遞,fun(&b,a);中傳入a字符。*c=*c+1將c的值變?yōu)閎字符。主函數(shù)的值改變。第二個(gè)參數(shù)是值傳遞,所以在函數(shù)中d的值為B字符。但是并不影響主函數(shù)的值,所以主函數(shù)輸出a的值是A。b的值是b。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了頭屯河免費(fèi)建站歡迎大家使用!
一般變量作為形參,是不能改變實(shí)參值的哦,要返回?cái)?shù)據(jù)就用return;指針指向真實(shí)的地址,不重新分配內(nèi)存,所以調(diào)用函數(shù)后,如果函數(shù)里改變了指針指向的值,那這個(gè)數(shù)就真的變了。調(diào)用就是用函數(shù)名,還要傳送相應(yīng)的調(diào)用參數(shù)。
如果使用指針作為參數(shù)就是地址傳遞,否則只是值傳遞。你可以看下下面的這個(gè)函數(shù):void modify(int a){ a++;} void main(){ int a=5;modify(a);printf(%d,a);} 這個(gè)程序的答案還是5。
1、你的代碼的min和max都是指向a[0]的,而*max=a[i]或*min=a[i]都把a(bǔ)[0]改變了,所以達(dá)不到目的。這樣改——把*min=a[i];改成min=a+i;或min=&a[i];。把*max=a[i];改成max=a+i;或max=&a[i];。
2、新建一個(gè)工程和.c文件,并且輸入主函數(shù)和頭文件。定義全局變量。定義變量類型。用兩個(gè)for語句給數(shù)組元素賦值。調(diào)用求最小值的函數(shù)。函數(shù)的總體流程如下圖。
3、for(i=1;iN;i++) 數(shù)組下標(biāo)是 0開始的。 不是1 。 1就不對(duì)了。
4、將輸入的整數(shù),保存在數(shù)組中。用函數(shù)min判斷輸入整數(shù)的最小值,保存到變量中。然后,用函數(shù)max判斷輸入整數(shù)的最大值,保存在變量中。最后,輸出整數(shù)中的最小值和最大值。
5、這樣就需要根據(jù)長(zhǎng)度(即數(shù)字的個(gè)數(shù))來分配存儲(chǔ)空間,否則指針b只能指向一個(gè)int型的數(shù)字,而不是指向你輸入的數(shù)字的存儲(chǔ)空間的起始位置。
1、一個(gè)函數(shù)(actionfun)作為另一個(gè)函數(shù)的參數(shù)(mainfun),實(shí)際上是在運(yùn)行主函數(shù)mainfun的時(shí)候,得到的一些數(shù)值傳入到actionfun函數(shù)中,actionfun為主函數(shù)做一些設(shè)置也可以執(zhí)行一些其他的功能,但都要從主函數(shù)mainfun中得到參數(shù)。
2、你在子函數(shù)中要對(duì)你的主調(diào)用函數(shù)中變量進(jìn)行操作時(shí)也可以用指針做參數(shù),這樣子函數(shù)就可以不用return 如果不是用指針的話,就要再子函數(shù)的未尾加上一條return x;把這個(gè)數(shù)返回當(dāng)返回值。
3、應(yīng)該改為 if((*cmp)(a[i],a[i+1]))swap(a+i,a+i+1);才對(duì)。估記swap是交換兩個(gè)地址的內(nèi)容。b u b b l e _ s o r t函數(shù)的最后一個(gè)參數(shù)是指向函數(shù)的指針,即是函數(shù)的入口地址。
4、swap() 中是 int *p1 和int *p2這是因?yàn)檫@是swap的定義,既然是定義就要聲明參數(shù)的類型,這里聲明的是int*類型,那使用的時(shí)候就要傳遞int*類型的。主函數(shù)里的類型也是int*,對(duì)應(yīng)上了,就可以了。