并不是不規(guī)范的問(wèn)題,你子程序?qū)懛ㄖ荒茉谧映绦蛑休敵稣_的數(shù)據(jù),而在主函數(shù)中無(wú)法得到交換過(guò)的x和y的值。參考程序運(yùn)用指針讓子程序去讀寫a和b的值,在子程序執(zhí)行完成后,a和b的值確實(shí)得到了交換。
十多年的烏蘭網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整烏蘭建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“烏蘭網(wǎng)站設(shè)計(jì)”,“烏蘭網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
你的程序中子程序采用的不是指針類型參數(shù),這樣子程序無(wú)法將交換過(guò)后的值傳回來(lái)。
#includestdio.h
int *d_bubblesort(int a[],int n)//數(shù)組長(zhǎng)度為n的冒泡降序排序
{
int i,j;
int temp;
for(i=0;in;i++)
{
for(j=n-1;ji;j--)
{
if(a[j]a[j-1])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
return a;
}
void main()
{
int i;
int *p=NULL;
int a[10]={6,5,4,1,2,3,9,8,7,10};
int *(*fun)(int*,int);
fun=d_bubblesort;
p=fun(a,10);
for(i=0;i10;i++)
{
printf("%d\t",p[i]);
}
}
void point(char *p){ p+=3; } //加上void比較好
char b[4]={'a','b','c','d'}, *p=b; //寫在同一行,p是char*的
point(p);// 這里傳遞的是指針,在函數(shù)里面改指針是“臨時(shí)變量”,不是局部變量
//臨時(shí)對(duì)象不會(huì)被記錄,如果改p指向的內(nèi)存就可以被記錄。
printf("%c\n", *p); // 輸出結(jié)果為a,因?yàn)閜是扔指向b[]其實(shí)位置
答案為a
1.如果是返回值是指針
char* getname()
{
char* pname=new char[23]; //返回指針必須是函數(shù)釋放后并未釋放的內(nèi)存空間,
cout"input your name:\n"; //一般返回兩種情況,一是在函數(shù)中像該函數(shù)一樣動(dòng)態(tài)分配堆內(nèi)存
cin.getline(pname,22); //二是返回指針指向參數(shù)中地址,如: int* max(int a,int b) { return a; }
pname[22]='\0';
return pname;
}
int main()
{
char* name=getname();
cout"your name is: "nameendl;
delete []name; //記得動(dòng)態(tài)釋放分配內(nèi)存
return 0;
}
2.參數(shù)是指針類型
常見的是通過(guò)指針或引用交換兩個(gè)數(shù)的值
void swa(int* p1,int* p2)
{
int temp=*p1; *p1=*p2; *p2=temp;
}
int main()
{
int a=2,b=3;
swa(a,b); //傳遞地址
return 0;
}
附解:你可以把指針看做是一種復(fù)合類型,它之所以可以修改參數(shù)值,本質(zhì)是因?yàn)?/p>
對(duì)指針解除引用*p形式是操作的參數(shù)所存數(shù)據(jù)內(nèi)存空間,但如果它不解除引用,它
并不會(huì)修改參數(shù)的值:如
void swa(int* p1,int* p2) //函數(shù)意思是最初始在函數(shù)參數(shù)塊中定義兩個(gè)指針p1,p2,使
{ //p1指向a,p2指向b,下面函數(shù)體只是使指針指向地址改變,成了
//p1指向b,p2指向a。但并未對(duì)a,b內(nèi)存空間操作,當(dāng)函數(shù)調(diào)用結(jié)束后,指針p1,p2
//也釋放了,所以并未起任何作用
int* temp;
temp=p1; p1=p2; p2=temp;
}
int main()
{
int a=2,b=3;
swa(a,b); //傳遞地址
couta" "b;
return 0;
}
這個(gè)函數(shù)并不會(huì)交換a,b的值
在程序運(yùn)行時(shí),一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),實(shí)際上是跳轉(zhuǎn)到函數(shù)的入口地址,執(zhí)行函數(shù)體的代碼,完成后返回。
函數(shù)指針指向一個(gè)函數(shù)的入口地址,也就是函數(shù)存儲(chǔ)空間的首地址。
在C語(yǔ)言中,數(shù)組名代表數(shù)組的首地址,同樣函數(shù)名代表了函數(shù)的首地址,因此在賦值時(shí),直接將函數(shù)指針指向函數(shù)名就行了。
因此函數(shù)指針調(diào)用vs直接調(diào)用,占用的存儲(chǔ)空間都是一樣的。相當(dāng)于數(shù)組指針和數(shù)組名的關(guān)系,指向的都是同一個(gè)數(shù)組。
局部變量存在函數(shù)體里面,比如轉(zhuǎn)換成8086匯編(示意):
func: 定義變量
push ax
pop ax
ret
main: call func
滿意請(qǐng)采納,謝謝!
#include"stdio.h"
void sub(int* c,int* d,int* p,int* q)
{
int i,j;
i=(*c)*(*c);
j=(*d)*(*d);
*c=i*j;
*d=(i-j);
*p=i+j;
*q=i-j;
}
void main()
{
int i=3,j=4,k,s;
void sub(int*,int*,int*,int*); //參數(shù)表少個(gè)逗號(hào),可以把這一行刪掉,因?yàn)閟ub函數(shù)是在main()前面定義的
sub(i,j,s,k);
printf("k=%d\n",k);
printf("s=%d\n",s);
printf("i=%d\n",i);
printf("j=%d\n",j);
}
網(wǎng)站欄目:c語(yǔ)言動(dòng)態(tài)調(diào)用函數(shù)指針 c語(yǔ)言函數(shù)指針調(diào)用函數(shù)
地址分享:http://chinadenli.net/article2/hgceoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、網(wǎng)站收錄、網(wǎng)站改版、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)