C語言實引數組與形引數組問題,關於c語言中陣列作為函式引數的函式之間呼叫問題

2023-02-13 21:05:28 字數 4723 閱讀 6759

1樓:走出憧憬

這個問題是這樣的了,因為你的陣列定義的是二維大小是20*20 地址空間已經分配好了,而但你輸入的m和n的值小於20的時候,你只是先給第一維賦值,如果輸入的數字大於20,在對第二維賦值,但你輸入一些小的m和n時,其實二維陣列你還沒有賦值,他們的值還是你預設給的0啊,而當你用二維陣列去讀數的時候 a[0][j]的值就是從a[0]開始,所以結果是對的.

但是a[1][j]的地址卻是&a[0][0]+4*20,可以看出你並沒對那裡賦值。

你可以把陣列改小一點,如3*3啊,4*4啊什麼的然後輸入看結果就是對的了

你可以用我的這個程式去看看執行後的結果,你就會明白了:

#include

main()

,n,m,i,j;

printf("enter the n and m:");

scanf("%d%d",&n,&m);

enter(a[0],n,m);

printf("\n");

for(i=0;isystem("pause");

} void enter(int ar,int n,int m)

2樓:匿名使用者

enter(a[0],n,m); 這邊是a[0]你這樣試試

#include

void enter(int ar, int m);

int main()

,n,m,i,j;

printf("enter the n and m:");

scanf("%d%d",&n,&m);

printf("please enter\n");

for (i = 0 ;i < n; i++)enter(a[i],m);

printf("\n");

for(i=0;ireturn 0;

} void enter(int ar,int m)

c語言中一維陣列作為實參時,對應它的形參怎麼寫?c語言中二維陣列作為實參時,對應它的又形參怎麼寫?

3樓:匿名使用者

陣列作為引數使用到函式中時

傳遞方式是雙向傳遞

而並非普通變數的單項傳遞

因此:int b[10];

add ( b ); // 即可

二圍陣列同理

4樓:匿名使用者

一維可以直接寫成void fun(char a);

二維則需要寫出第二維的大小void fun(char a[5]);

在這2中宣告中,都可以寫完整的維數

void fun(char a[3]);

void fun(char a[2][5]);

5樓:匿名使用者

int *x;

int **x

關於c語言中陣列作為函式引數的函式之間呼叫問題

6樓:肥仙女

1、新建一個陣列作為引數專案,如圖所示:

2、新增一個array.c檔案,如圖所示:

3、包含stdio.h和stdlib.h標頭檔案,如圖所示:

4、輸入main函式主體及返回值,如圖所示:

5、定義一個陣列arr,如圖所示:

6、定義一個function函式,如圖所示:

7、將陣列作為引數傳遞給function函式,如圖所示:

8、執行程式,輸出結果,如圖所示:

7樓:董音廣子珍

這問題說明你對指標的運用還是不熟練的,既然是陣列,作為函式引數傳遞的是陣列首地址.

#include

#include

void

func1(int

*array,

intsize)

}//陣列array_b根據陣列array_a的元素乘以項數獲得元素值

void

func2(int

*array_a,int

*array_b,

intsize)

//輸出陣列元素

void

print(int

*array,

intsize)

intmain(void)

8樓:匿名使用者

函式在陣列中的呼叫是以陣列名為實參呼叫的,因為陣列名就是陣列的首地址,所以說對陣列的呼叫是不需要返回值的,主調函式裡面的陣列值會隨被調函式的形引數組改變而改變,當然這些都是在你以陣列名作為實參的前提下

9樓:駭客之劍

如果傳遞值是指標(地址),也就是陣列名,雖然在子函式裡面,但複製過去的是地址,所以可以對地址裡面指向的內容進行操作,也就是一個子函式中可以實現對多個值的操作,如果傳遞的是內容,則至多通過return 進行一個返回值操作,總之,要看你傳什麼

10樓:匿名使用者

nt *&pvec是c++中的指向int型別指標的引用,就是pvec本身是對函式呼叫時實參的一個引用,而這個實參的型別是一個指向整形的指標型別,之所以使用引用,是因為要在函式中修改這個指標的內容。(如果只需要修改指標指向的記憶體單元的內容,只需要用指標型別作為形參就可以)

int &size 中size同樣是一個引用,是指向int型別的一個引用,目的同樣是修改引用的實參的值。

fstream在c++中是一個檔案流型別,可以讀取也可以寫入,fstream&可以傳入一個fstream型別的物件,在函式中的目的同樣是修改原有實參的內容,引用不會對實參進行拷貝。

在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。

11樓:足壇風行者

首地址。

因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:

a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。

擴充套件資料

c語言中函式引數傳遞的三種方式:

1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。

2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。

3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。

12樓:匿名使用者

實引數組的首地復址。

在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。

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

13樓:匿名使用者

陣列名傳遞的是陣列的地址也就是第一個元素的地址 所以選 d

14樓:天雨下凡

選擇d.實引數組的首地址

15樓:匿名使用者

d首地址

~~~~~~~~

16樓:yeara洛

d.實引數組的首地址

若用陣列名作為函式呼叫時的實參,則實際上傳遞給的形參的是(c)

17樓:

若用陣列名作為函式呼叫時的實參,則實際上傳遞給形參的是陣列首地址。

陣列首地址陣列第一個元素的地址。陣列名字本身就是一個指標,它是一個指標常量,指向的地址不變。

比如定義了一個陣列變數,編譯器就會在記憶體中劃分了一塊地址空間給它,陣列名這個指標常量就指向了這塊記憶體空間的首地址,而陣列首元素就存在這段記憶體空間的首地址處,即這段記憶體空間的首地址跟陣列首元素的記憶體地址是一樣的。

18樓:很會飛的青蛙

一個指標,是陣列的首地址。在函式中作的變動會影響實參。這個你仔細看一下calloc函式會有些幫助

c語言規定,陣列名做實參時,它和對應形參之間的資料傳遞方式是�

19樓:聽不清啊

把實引數組的首地址單向傳遞給形參。

20樓:銀ta嗎

陣列名就是指標,實際上是對同一地址上的操作

21樓:

實際上傳遞的是一個指標

c語言中實引數組名與形引數組名能一樣嗎

22樓:

當然可以一樣,實引數組名和形引數組名是兩個不同的儲存單元,不會出現二義性問題的。

23樓:

可以一致;實參是在呼叫函式中的,而形參是在子函式中;兩者互不干擾的

c語言 一維陣列 實參與形參與指標的問題

24樓:gta小雞

實參是a,它可以作為指標名使用,等同於指向首元a[0]的指標。形參int a等價於int *a,它指向實參a陣列的首元a[0]的地址。

c語言中關於陣列名作為函式引數方面的問題

不知道你說的第2,4,5語句對應的是什麼。幫你解釋為什麼是1 當你呼叫fun a,b,s 傳進的引數實際上是 a 0 b 0 s變數的值 實際上也就是 a 0 現在我們把fun的形參換個名字 fun int p1,int p2,int p3 進入fun時 p3 s 即p3 a 0 你呼叫malloc...

關於在c語言宣告帶有變長陣列引數的函式

在c語言中,函式中要用陣列做引數,可以採用三種方式,其中後兩種均可適用於變長陣列引數。1 直接以定長陣列做引數,宣告形式為 ret type func int a 100 這裡就是以100個元素的陣列做引數的。2 宣告時不帶長度,即 ret type func int a 3 以指標替代陣列,即 r...

求問個c語言問題,為什麼二維陣列做引數引用時,陣列要填下標

不清楚你學指標沒,如果學了這個問題就好說了.二維陣列是一個二級指標,而一維陣列就是版一個普通的指標權.二維陣列其實也是一維的,只是它的一個元素還是一個陣列.而一維陣列要得到一個元素可以這樣 p i 這樣是完全等價於p i 的.而二維陣列想要得到它其中的一個元素就要這樣 int i 10 3 i 1 ...