當前位置:首頁 » 編程語言 » c語言把數組作為參數

c語言把數組作為參數

發布時間: 2023-05-02 02:11:01

『壹』 c語言 數組做參數

#include<stdio.h>
void山信fun(inta[10])
{
intt,i;
for(i=0;i<5;i++)
{余譽
t=a[i];
a[i]=a[5+i];
a[5+i]豎唯段=t;
}
}
voidmain()
{
intc[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(c);
for(i=0;i<10;i++)
printf("%d,",c[i]);
printf(" ");
}

『貳』 C語言 數組做參數

strcmp的參數里p[j]和p[j+1]是指針數組的元素,裡面存放的是字元串的首地址。在c語言中,字元串都是用首地址來表示的,所以可以吧指針數組中的地址值說成是代表字元串。

『叄』 C語言中如何將二維數組作為函數的參數傳遞

在C語言中可以用二維數組作為實參或者形參。


1、函數中用二維數組作為形參,函數聲明中可以指定所有維數的大小,也可以省略第1維的維數如:

voidf(intarray[3][10]);//正確
voidf(intarray[][10]);//正確

上面的兩種二維數組形參表示都是正確的。


2、函數中用二維數組作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:

voidf(intarray[][]);//錯誤

因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

voidf(intarray[3][]);//錯誤

3、二維數組作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的數據類型一致。比如定義如下函數:

voidf(intarray[][10]);

可以將如下數組傳遞給函數f。

inta[2][10]={1,2,3,4};
intb[4][10]={1};

『肆』 c語言中數組名作為函數參數

要將數組長度作為一個參數傳給average函數,不能在average函數內部埋斗殲通過int arrLen = sizeof(a) / 4;來計算數組長度彎沖。因為float average(float a[10])就相當於float average(float *a) ,所以sizeof(a)恆等銷悄於4,sizeof(a) / 4恆等於1。
應該這樣:
float average(float a[10],int arrLen) {
float sumSco = 0;
for (int i = 0; i < arrLen; i++)
{
sumSco += a[i];
}
return sumSco / arrLen;
}

『伍』 在C語言中,數組作為參數,是怎樣在函數之間傳遞的啊

數組作為參數是按地址傳遞的
數組名就是數組的首地址。因此在數組名作函數參數時所進行的傳送只是地址的傳送, 也就是說把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之後,也就等於有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。

『陸』 C語言數組當參數傳遞

在學習C語言的過程中遇到數組作為參數傳遞的問題

一維數組:

這樣我們可以很順利的在test去遍歷這個數組a,當然我們還可能傳遞指針:

一般來數參數的傳遞是值傳遞,也就是說實參傳給形參,形參發生改變時實參並不會改變,(單向)但是數組在傳遞的時候是地址傳遞,只要形參發生了變化,實參也會發生變化(雙向)。

這樣傳遞數組就會發現一個問題,我沒有辦法獲取到數組的長度。獲取數組的長度我們一般用:

我們會發現n的值一直是2!為什麼會這樣呢!?
因為,a是函數參數,到了本函數中,a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這里只是告訴函數:一個數據空間首地址),所以,sizoef(a)的結果是指針變數a占內存的大小,一般在64位機上是8個位元組。int類型是4個位元組,所以,結果永遠是2,因此,我們要向獲取數組長度要怎麼辦呢?

我可以在初始化數組的地方獲取到數組的長度,作為參數傳遞過來:

這樣做我們可以獲取到數組的長度。

二維數組:

二維數組作為參數傳遞是後我們不可以像以為數組那樣直接,如:

會發現編譯都編譯不通過,報「[Error] declaration of 'a' as multidimensional array must have bounds for all dimensions except the first」這個錯,意思是多維數組的定義必須有一個除第一個之外的所有維度的邊界,比如:

這樣就OK了,但是我們是動態分配的數組不知道這個維度是多少的時候怎麼辦?這時候我們可以用指針當做一維數組來操作:

這樣我們發現不能更靈活的去定位到某一行某一列,這樣我們需要手工改變定址方式:

『柒』 C語言數組作為參數

int Arrage(int iArrage[10])這個函數的參數是iArrage,這是一個int型指針,所以要傳一個int型指針進去,液姿凳比如main函數中的iStudent就是個鬧旅int型指針冊檔

『捌』 在c語言中怎麼將數組直接作為函數的參數 比如 int f(int a[10]) 在調用函數時會顯示

要把數組作為函數的參數,在函數定義的時候,就要在參數列表設置數敬指針,裂尺因為數組名就肆畢高是數組的頭指針,在調用時直接把數組名作為函數的參數就好了
比如
int fun(int *a)
{
//...
}
int main()
{
int a[10];
int result=fun(a);
return 0;
}
這樣就好了
通常為了在函數中確保訪問數組不越界,在參數列表還要假如數組的長度,方便函數訪問數組
如下:
int fun(int *a,int length)
{
int i,sum=0;
for(i=0;i<length;i++)
{
//...對數組的每個元素進行訪問
sum+=a[i];//把全部元素加起來
}
return sum;
}
int main()
{
int i,a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
int result=fun(a,10);
printf("總和為:%d\n",result);
return 0;
}

『玖』 C語言數組作為形參實參的一些疑惑

void fun(int arr[], int n);

在函數定義的時候,形參int arr[]不是表示某個元素的值,而是告訴編譯器第一個參數是一個數組指針,可以接收實參傳過來的數組地址。

實際上以上定義等價於下面的定義。

1.數組裡面帶元素個數:

void fun(int arr[常數], int n);

這里的常數可以是任意正整數,實際上編譯器是會忽略,因為這里只要告訴編譯器我接收的是一個數組指針,至於它有多少個元素不關心,因為實參也只是傳個地址過來。元素個數由參數二控制。至於為什麼要這么約定可以看下面補充說明。

2.void fun(int *arr, int n);

使用指針,這種方式和題目中的方式是最常用的方式,第一種最不常用。

補充說明(為什麼數組作為函數參數是傳地址,而不是傳每個元素):

設想一下,有一個函數如下

int fun(int nums[1000], int size)

它的參數一要處理1000多個元素的數組,如果是傳值即每個元素,那在函數體內是不是就得再申請1000多個整數的內存,還需要把值從實參那裡復制過來,這是非常耗時間的而且沒有必要,因為在內存的某個塊已經存放了這些數據。只要告訴放在哪個位置,你函數體去那裡找就行了。這里說的就是傳地址了,只需要傳個數組首地址,然後告訴有多少個元素要處理就OK了。傳地址只需要復制地址給形參,相對傳每個元素快得多。

『拾』 c語言中怎麼用二維數組作為函數參數

二維數組作為函數參數,實參可以直接使用二維數組名,在被調用函數中對形參數組定義可以指定所有維數的大小,也可以省略第一維的大小說明,如:

因為從實參傳遞來的是數組的起始地址,如果在形參中不說明列數,編譯器將無法定位元素的的位置。

熱點內容
sql2008鏈接伺服器 發布:2025-07-19 16:23:47 瀏覽:845
香港阿里騰訊雲伺服器報價 發布:2025-07-19 16:18:52 瀏覽:415
日語翻譯存儲安全 發布:2025-07-19 16:18:09 瀏覽:209
虛擬機訪問主機ip 發布:2025-07-19 16:16:37 瀏覽:996
dz手機源碼 發布:2025-07-19 16:14:50 瀏覽:703
如何利用伺服器掛機器人 發布:2025-07-19 16:13:35 瀏覽:531
解壓縮已 發布:2025-07-19 16:02:46 瀏覽:579
預處理編譯鏈接 發布:2025-07-19 15:59:03 瀏覽:874
文件夾無限打開 發布:2025-07-19 15:57:01 瀏覽:276
研究生復試需要什麼配置的電腦 發布:2025-07-19 15:42:21 瀏覽:966