❶ 在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語言中數組作為函數參數
C中數組名代表該數組的首地址,
char
s[]="abc";
s代表的就是『a』在內存中的地址
以地址作參數
,實參和形參同時改變
❸ 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語言數組作為函數的實參和形參的問題
個人覺得, 形參和實參這種叫法讓人摸不著頭腦
調用子函數時實際上是把數組的首地址傳遞給子函數, 子函數中的參數score這個變數得到這個地址, 就這么簡單
❺ C語言中用數組做為形參為什麼形參改變時實參也要變
因為數組傳遞的是數組的首地址,所以也是地址傳遞,所以形參改變時實參也要變。
❻ C語言數組名做函數參數,形參為什麼不定長度
在C語言中,如果把數組作為一個函數的參數的話,在對函數進行傳值的時候只是把數組的首地址傳過去,也就是指針傳過去,所以再用sizeof(array)/sizeof(int)求數組的大小隻能得到1。
可以提前把數組的長度求出在單獨定義一個長度參數進行傳值。
❼ C語言中如何將二維數組作為函數的參數傳遞
在c語言中可以用二維數組作為實參或者形參。
1、函數中用二維數組作為形參,函數聲明中可以指定所有維數的大小,也可以省略第1維的維數如:
void f(int array[3][10]); //正確
void f(int array[][10]); //正確上面的兩種二維數組形參表示都是正確的。
2、函數中用二維數組作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:
void f(int array[][]); //錯誤
因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:
void f(int array[3][]); //錯誤 3、二維數組作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的數據類型一致。比如定義如下函數:
void f(int array[][10]);可以將如下數組傳遞給函數f。
int a[2][10] = {1,2,3,4};
int b[4][10] = {1};
❽ c語言c++語言如何用二維數組做形參
C/C++中,二維數組的第一維的每一個元素都是一維數組。所以,用指向一維數組的指針或用第一維維數空缺的二維數組作為函數的形式參數都能達到目的。設處理數組為int型,舉例代碼如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
voidmyprint(int(*p)[5]){//p是指向有5個int型元素的一維數組的指針
//voidmyprint(intp[][5]){//這樣寫效果是一樣的
inti,j;
for(i=0;i<3;i++){
for(j=0;j<5;printf("%3d",p[i][j++]));
printf(" ");
}
}
intmain(void){
inta[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
myprint(a);
return0;
}
❾ c語言怎麼將數組作為函數參數傳入
一維數組的元素作為函數實參,與同類型的簡單變數作為實參一樣,是單向的值傳遞,即數組元素的值傳給形參,從而形參是改變不影響實參
數組名代表著整個數組的地址,如果一維數組的名字作為函數實參,傳遞的是整個數組,即形參數組和實參數組完全相同,是存放在同一存儲空間的同一個數組。這樣形參數組
修改時,實參數組也同時被修改了。形參數組的元素個數可以省略。
#include<stdio.h>
//數組作為函數參數,可以省略元素個數
//數組作為函數參數,傳遞是整個數組的地址,修改了函數形參數組元素的值,會影響到外面的實參數組
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
輸出結果為: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
❿ 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;
}