C語言.定義一個函數(shù)實現(xiàn)交換兩個整數(shù)的功能,(用指針做函數(shù)參數(shù))。 #includestdio.h

創(chuàng)新互聯(lián)主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、重慶小程序開發(fā)公司等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運(yùn)作于一體。
void swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
main()
{ int a=5,b=4,*p,*q;
p=a; q=b;
swap(p,q);
printf("a=%d b=%d",a,b);
return 0;
}
..
C語言 指針做函數(shù)參數(shù) 的優(yōu)點(diǎn)
首先你要認(rèn)悶跡識函數(shù)傳參是怎么進(jìn)行的
函數(shù)傳參是復(fù)制形的,舉個例子說:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
這個程序的答案還是5。為什么?
因為當(dāng)調(diào)用陪備modify(a)時,在執(zhí)行modify函數(shù)時,是另外開辟了一個內(nèi)存空間,將main中a的值復(fù)制過來,modify函數(shù)中所有的操作都是相對于這個新開辟的內(nèi)存空間而言的,對原來的a沒有任何改變。
現(xiàn)在就來說說指針,如果用指針傳參的話那就完全不一樣了,指針(pointer),說白了即是指向變量內(nèi)存地址。同樣上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
這個答案當(dāng)然是6
因為你傳進(jìn)去的是a的地址,所以在modify函數(shù)中的操作都是對a地址上的內(nèi)容進(jìn)行操作,即是操作a所以modify函數(shù)不用返回這個數(shù),main中a的值也會改變。因為大家都是操作同一個內(nèi)存空間,而上面不用指針,modify操作的是另一個新開辟的內(nèi)存空間,只是這個內(nèi)存空間初始值和a一樣。
現(xiàn)在來說說傳參,其實你“為什么函數(shù)參數(shù)是字符串的多用指針?” 那句我不是很明白,C中的字符串傳參好像就指針一種形式(除非用結(jié)構(gòu)體)。
何時用指針,何時用拷貝。當(dāng)傳的參數(shù)是一個結(jié)構(gòu)體,而這個結(jié)構(gòu)體比較大,這時最好用指針,因為如果用拷貝的話,單單花在拷貝的時間就要浪費(fèi)很多,而如果這個函數(shù)經(jīng)常被調(diào)用,那么這效率問題就出現(xiàn)了。
你在子函數(shù)中要對你的主調(diào)用函數(shù)中變量進(jìn)行操作時也可以用指針做參數(shù),這樣子函數(shù)就可以不用return 如果不是用指針的話,就要再子函數(shù)的未尾加上一條return x;把這個數(shù)返回當(dāng)返回值。
多看點(diǎn)書,多寫點(diǎn)程序,剛開螞亂并始學(xué)都會對指針比較迷茫。寫多了,自然而然就懂了。
c語言中如果函數(shù)的參數(shù)不用指針而用整數(shù)能否實現(xiàn)值交換?
不能
解釋:
1.就像是 你復(fù)印了一份文件, 對復(fù)印的文檔進(jìn)行修改 那么你的原文檔上面能有改動嗎?
C語言; 編寫一個函數(shù),用指針方法實現(xiàn)功能
int find(char* source/*源串*/, char* target/*子串*/)找到返回在源串中的位置,未找到返回-1,如果要改為找到返回1,把return i改為return 1;{ int i,j; int s_len=strlen(source); int t_len=strlen(target); if(t_lens_len) { return -1; } for(i=0;i=s_len-t_len;i++) { j=0; int flag=1; if(source[i]==target[j]) { int k,p=i; for(k=0;kt_len;k++) { if(source[p]==target[j]) { p++; j++; continue; } else { flag=0; break; } } } else { continue; } if(flag==1) { return i; } } return -1;}
C語言,用指向函數(shù)指針的知識實現(xiàn)兩個函數(shù)求和的功能
兩個函數(shù)求和?是兩個數(shù)求和的函數(shù)吧!
int add(int a, int b){ return a+ b;}
int main()
{
int sum;
int (*fn)(int , int );
fn = add;
sum = fn(3,5);
}
利用指針作函數(shù)參數(shù),設(shè)計一函數(shù)實現(xiàn)將n個元素進(jìn)行排序
將這n個元素存在數(shù)組里,然后用指針類型參數(shù)接收即作為形參,然后采用排序算法對這些元素進(jìn)行排序即可
C語言,編寫一函數(shù),其功能是求一個長整數(shù)各位數(shù)字之和。要求使用指針函數(shù)實現(xiàn)
其功能是求一個長整數(shù)各位數(shù)字之和:
int function(long l){
int sum = 0;
String s = l+"";把長整數(shù)轉(zhuǎn)成字符串
for(int i=0;is.length();i++){
sum +=Integer.ValueOf(s.charAt(i));
}
return sum;
}
c程序,使用指針作為函數(shù)參數(shù),編寫函數(shù)實現(xiàn)兩個字符串連接
char *mycat(char *a,const char *b){ char *t; if(!a || !b) return NULL; t=a; while(*a) a++; while(*a++=*b++); return t;}
編一個函數(shù)sort,使10個整數(shù)按升序排列,在main函數(shù)中輸入這10個數(shù),并輸出排好序的數(shù),函數(shù)參數(shù)用指針實現(xiàn)
#includestdio.h
void sort(int *a,int n)
{
int i,j,temp;
for(j=0;jn;j++)
for (i=0;in-j-1;i++)
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
void main()
{
int i,j,temp;
int a[10];
for(i=0;i10;i++)
scanf ("%d,",a[i]);
sort(a,10);
for(i=0;i10;i++)
printf("%d ",a[i] );
printf("\n");
}
c語言編程:用指針變量作函數(shù)參數(shù)求三個數(shù)和
#include "stdafx.h"#include "process.h"double getsum(double *a, double *b, double *c);聲明函數(shù) 參數(shù)為double類型的指針int main(int argc,char* argv[]){double *sum=new double;*sum = 0;double x = 1.33332;double y = 2.1;double z = 6.4;*sum=getsum(x, y, z);用變量地址做參數(shù)調(diào)用函數(shù)printf("%g\n",*sum);delete sum;釋放空間sum = NULL;system("pause");return 0;}double getsum(double *a, double *b, double *c){ return (*a +*b+ *c );}
大家都知道c語言主函數(shù)中交換兩個變量的值,可以通過以下代碼實現(xiàn):
#includestdio.h
int main()
{
int a=10,b=20,temp;//先定義一個temp
//以下實現(xiàn)兩個變量的交換(具體理解請參照圖一)
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d",a,b);//此時a=20,b=10;
return 0;
}
但是如何通過調(diào)用函數(shù)實現(xiàn)交換兩個變量的值呢?
首先我們先寫一下主函數(shù)
#includestdio.h
//調(diào)用函數(shù)前嫌態(tài)應(yīng)先聲明一下被調(diào)用函數(shù),此處暫時省略,分析完畢形參后,會寫上正確格式
//主函數(shù)
int main()
{
int a=10,b=20;
swap( );//此處正確寫法應(yīng)加入實參,但是為了分析,此時暫未寫實參
printf("a=%d,b=%d",a,b);
return 0;
}
//以下為被調(diào)用函數(shù)中常見錯誤
//常見錯誤1:
void swap( int m,int n )//接收a和b的值
{
int temp=m;
m=n;
n=temp;
}
//此處錯誤在于脊戚,此處為值傳遞,被調(diào)函數(shù)swap中交換了m和n的值,并未交換主函數(shù)中a,b的值櫻者陵,所以a和b輸出結(jié)果仍然為a=10,b=20;具體參考下圖
//常見錯誤2:
void swap( int *m,int* n )//接收a和b的地址
{
int *temp=m;//定義一個指針temp,把指針m中的地址賦給指針temp
m=n;
n=temp;
}
//此處錯誤在于,swap中實現(xiàn)了,兩個指針m和n指向的交換,但是并未對主函數(shù)中的a和b進(jìn)行操作,所以輸出結(jié)果依然為a=10,b=20;具體參考下圖
當(dāng)前名稱:c語言2個數(shù)通過函數(shù)交換 c語言編程實現(xiàn)兩個數(shù)的交換
本文網(wǎng)址:http://chinadenli.net/article41/dshoshd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、用戶體驗、軟件開發(fā)、商城網(wǎng)站、ChatGPT、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)