不可能達到目的。因為C語言中沒有引用這類型,C++才有。另,C/C++都不支持傳遞數(shù)組,只能傳遞數(shù)組的首元素或行指針,所以即使是C++,也只能傳遞數(shù)組指針的引用,而不可能傳遞數(shù)組的引用,因為數(shù)組沒有引用。
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、榆樹網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為榆樹等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
#include?stdio.h
#include?cstring
int?k=1000;
char*?find(char?*a)
{
//char?b[k];
/*最好將b的定義形式寫成下面static的形式。常規(guī)定義會出現(xiàn)警告,而且可能會輸出異常?
因為數(shù)組b會隨著函數(shù)結(jié)束而被釋放內(nèi)存,強行返回則會出現(xiàn)內(nèi)存溢出?
定義成靜態(tài)形式,則數(shù)據(jù)不會因為函數(shù)結(jié)束而被釋放內(nèi)存,但是靜態(tài)數(shù)組大小受到限制,
看你自己的實際情況選擇*/?
static?char?b[50];
int?j=0;
for(int?i=0;istrlen(a);i++)
{
if(a[i]='0'a[i]='9')
{
b[j]=a[i];
j++;
}
}
return?b;
}
int?main()
{
char?a[k];
printf("請輸入字符串:\n");
scanf("%s",a);
char?*c=find(a);
printf("字符串中數(shù)字有:\n");
printf("%s\n",c);
}
用返回值的形式來做數(shù)組問題確實不好,最好是用全局變量的形式做比較好。
有啥問題追問吧。
1、值傳遞
void swap(int x,int y)
{ ? ?int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
}
執(zhí)行后,并不會交換。
2、引用傳遞
void swap(int x,int y)
{ ? ?int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
printf("a=%d\nb=%d\n", a, b);
}
執(zhí)行后,發(fā)生交換。
3、指針傳遞
void swap(int *x,int *y)
{ ? ?int temp = *x; ? ?*x = *y; ? ?*y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
printf("a=%d\nb=%d\n", a, b);
}
執(zhí)行后,發(fā)生交換。
參數(shù)傳遞只有上面三種,但是如果加上數(shù)組,就會產(chǎn)生幾種新形式。
首先,明確數(shù)組型變量名本身只是該數(shù)組所占存儲空間的首地址:
int a[3] = { 1, 2, 3 }; ? ?int *p = a; //等價于下行 ? ?//int *p = a[0];
printf("%d", *p);?
典型的數(shù)組做參數(shù)。
void fun(char s[]){ ? ?for (int i = 0; s[i] != '\0'; i++)
printf("%c", s[i]);
}void main()
{ ? ?char str[] = "Hello World!";
fun(str);
}
函數(shù)調(diào)用時,這里系統(tǒng)不會為形參分配數(shù)組存儲空間,而是僅僅分配一個存放數(shù)組地址(第一個元素地址)的存儲空間,此后,將實參數(shù)組的首地址傳遞給形參變量。
其實本質(zhì)與下相同,只不過還是數(shù)組形式的(數(shù)組名代替指針)。
既然數(shù)組型變量名本身只是該數(shù)組所占存儲空間的首地址,我們當然可以用指針做形參來接收數(shù)組實參。
void fun(char *p){ ? ?while (*p)
{
printf("%c", *p);
p++;
}?
}void main()
{ ? ?char str[] = "Hello World!";
fun(str);
}
不過問題是如果這樣,無法把握數(shù)組結(jié)束(除非知道數(shù)組長度)。而對于字符數(shù)組(上例),由于字符串末尾有結(jié)束標志'\0'(ascii碼正好是0),所以就很容易利用指針來判斷字符串是否結(jié)束。
擴展資料:
調(diào)用帶參數(shù)的函數(shù):
在調(diào)用函數(shù)時,可以向其傳遞值,這些值被稱為參數(shù)。
這些參數(shù)可以在函數(shù)中使用。
可以發(fā)送任意多的參數(shù),由逗號 (,) 分隔:
myFunction(argument1,argument2)。
當聲明函數(shù)時,請把參數(shù)作為變量來聲明:
function myFunction(var1,var2){這里是要執(zhí)行的代碼}。
變量和參數(shù)必須以一致的順序出現(xiàn)。第一個變量就是第一個被傳遞的參數(shù)的給定的值,以此類推。
按值傳遞參數(shù):
按值傳遞參數(shù)時,是將實參變量的值復(fù)制一個到臨時存儲單元中,如果在調(diào)用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調(diào)用前的值不變。
按值傳遞參數(shù)時,需要在參數(shù)名前加"ByVal"關(guān)鍵字。
按地址傳遞參數(shù):
按地址傳遞參數(shù)時,把實參變量的地址傳送給被調(diào)用過程,形參和實參共用內(nèi)存的同一地址。在被調(diào)用過程中,形參的值一旦改變,相應(yīng)實參的值也跟著改變。
如果實參是一個常數(shù)或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關(guān)鍵字。
按數(shù)組傳遞參數(shù):
在VB6.0中,允許使用數(shù)組作為實參傳遞到子過程的形參中,數(shù)組傳遞必須采用地址傳遞的方式來傳遞參數(shù)。數(shù)組參數(shù)在傳遞時應(yīng)注意以下兩個方面:
① 在實參和形參列表中只寫數(shù)組名,忽略維數(shù)的定義,但圓括號不能省,當數(shù)組作為參數(shù)傳遞時,系統(tǒng)將實參數(shù)組的起始地址傳給過程,使形參數(shù)組也具有與實參數(shù)組相同的起始地址,若參數(shù)是多維數(shù)組,每維以逗號分隔。
② 被調(diào)過程可分別通過Lbound和Ubound函數(shù)確定實參數(shù)組的下界和上界。
參考資料來源:百度百科-參數(shù)傳遞
參考資料來源:百度百科-字符串
在主函數(shù)里面,sizeof是數(shù)組占的空間
在作為參數(shù)時,會被轉(zhuǎn)為指針
所以在函數(shù)里面打印的是sizeof(char*)
對于任意指針,sizeof的值都是當前編譯器位數(shù)。你的是32位編譯器,輸出就是4
ps:4字節(jié)=32位
網(wǎng)頁題目:c語言字符數(shù)組的函數(shù)傳遞 字符數(shù)組傳參 c語言
標題路徑:http://bm7419.com/article48/dohjchp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、小程序開發(fā)、面包屑導(dǎo)航、網(wǎng)站制作、App設(shè)計、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)