c語言函數形參是數組
⑴ c語言中函數定義形參為數組時的問題
1.數組為參數傳遞的是數組首地址,而不是元素的值,而你說的a[size]僅僅是值,況且事實上也沒有a[size]這個元素
2.既然是數組名的傳遞,當然需要由一個數組的參數來接收,int v[]」的問題是因為他是形式參數,是為了接收數組的
n的問題是因為,如果只傳遞了數組,但是函數並找不到數組的個數,所以需要把數組大小傳遞過來
⑵ 關於c語言中數組作為函數參數的函數之間調用問題
1、新建一個數組作為參數項目,如圖所示:
⑶ C語言中,數組名作為函數參數,屬於什麼傳遞,為什麼
C語言中,數組名作為函數參數,屬於數組參數傳遞。在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須採用地址傳遞的方式來傳遞參數。
數組型變數名本身只是該數組所佔存儲空間的首地址,函數調用時,系統不會為形參分配數組存儲空間,而是僅僅分配一個存放數組地址(第一個元素地址)的存儲空間,此後,將實參數組的首地址傳遞給形參變數。
(3)c語言函數形參是數組擴展閱讀:
數組參數在傳遞時應注意以下兩個方面:
1、 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括弧不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔。
2、被調過程可分別通過Lbound和Ubound函數確定實參數組的下界和上界。
⑷ 函數形參是數組 但是我想對對作為形參的數組的操作不改變實參數組
1。保證傳遞的實參不被改變,因此可以考慮定義局部數組用於返回,但是考慮到程序的健壯性,應該在定義時用const限定
2。只對形參的數組操作,可用一個簡單的return 返回,但前提是不能返回動態開辟的內存
因此可以定義為如下形式:ElemType * fun(const ElemType *array)或者其他等同形式
3。很多C語言庫函數就是這樣定義,如strcpy函數等,但是C語言中並沒有const關鍵字
⑸ 在C中想把數組作為函數的一個形參,是怎樣的形式
EG:
void
sortl(float
b[],int
n)/*其中函數參數有兩個:一個是數組,形參的形式是b[],它在調用是接受具體數組的首地址;另一個形參是N,它在調用時數組元素的具體個數。注意用數組作為形參時,數組名是一對空方括弧,而不能寫成b[n],數組元素個數用另一個形參*/
{
int
i,j;
float
t;
for
(i=0;i
b[j])
{
t=b[i];b[i]=b[j];b[j]=t
}
}
⑹ 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語言中數組作為函數參數
C中數組名代表該數組的首地址,
char
s[]="abc";
s代表的就是『a』在內存中的地址
以地址作參數
,實參和形參同時改變
⑻ c語言 函數調用(形參為數組名的情況)
#include <stdio.h>
void sort(int a[20])
{ int i,j,k,t;
for(i=0;i<19;i++)
{ k=i;
for(j=i+1;j<20;j++)
if(a[k]>a[j]) k=j;
t=a[k];a[k]=a[i];a[i]=t;
}
}
void main()
{ int a[20]={2,5,7,8,4,10,48,96,65,74,35,84,15,38,52,56,60,20,17,80};
sort(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語言自定義函數形參為數組名有必要返回值嗎
如果僅僅為了修改數組的值,是不需要返回值了,因為代表了一個單元。
但是按照規范來說,最好每一個調用函數都有一個返回值比較安全。例如當你做容錯的時候也方便多了。
樓下的哥們,就算是改變值也沒有必要返回值,注意他的參數是一個數組名,是一個地址。