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 ...