Ⅰ 關於c語言二維數組作為參數
你在這里使用指向整數的指針去訪問一個二維,不是不可以,但是前提是這里的size,必須與N的值完全相等。這里出錯的原因就在於你程序的N=10,而size卻等於3。你試一下定義N=3,看看怎麼樣。
Ⅱ c語言二維數組做形參的疑惑
是等價的
很多人以為「指向數組的指針」就是「指向指針的指針」,於是有人寫這樣的代碼:
int a[3][4];
int **p = a;//錯誤
這個代碼的錯誤之處在於a是一個數組,它的成員也是數組,所以a叫做「數組的數組」——C中嚴格說來沒有二維數組。那麼,你要用一個指針來記錄a,就要用一個能表示「數組的數組」的指針,以下代碼是正確的:
int (*p)[4] = a;//正確
只有這樣才能保證++p使p指向a的下一對像(該對像是一個數組)。
順便提一句:不要寫成「int *p[4];」
Ⅲ c語言中的結構體二維數組做參數問題
1、如果在函數外定義的結構數組,又要在一個函數中進行輸入、輸出,通常情況下,其參數傳遞類型需要傳址,即
void shuchu(struct std **cansu);
void shuchu(struct std *cansu[]);
這樣調用改為 shuchu(&aa);
對函數內的相應操作改為指針操作即可。
2、通常情況下,對於一個系統設計而言,其輸入輸出是分開的,也即在2個函數中,從系統分析而言,建議分開。當然,就測試而言,是可以的。
3、如果一定要採用2維數組做參數,按照對於多維數組做參數的要求,前幾維一定要給出確切的數值
如2維: void shuchu(struct std cansu[5][]) 就可以了。
Ⅳ 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語言的二維數組作為函數參數的問題
所謂二維數組,實際上是指向數組的指針,比如:
int n=2,m=3;
int arr[n][m];
實際上相當於:
int n=2,m=3;
int (*arr)[m];
所以,傳遞二維數組作為參數,實際上就是傳遞了一個指針。
將形參的類型定義成int*,再在函數內部轉換回指向數組的指針就行了,比如:
void f(int *p,int row,int column)
{
int (*arr)[column]=(int (*)[column])p;
//使用二維數組arr
}
這樣傳遞參數:
int n=5,m=6;
int arr[n][m];
f((int*)arr,n,m);
下面是一個例子:
#include <stdio.h>
void f(int *p,int row,int column)
{
int (*arr)[column]=(int (*)[column])p;
for(int i=0;i<row;i++)
{
for(int j=0;j<column-1;j++)
printf("%d,",arr[i][j]);
printf("%d ",arr[i][column-1]);
}
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
arr[i][j]=i*n+j;
}
f((int*)arr,n,n);
return 0;
}
這是運行截圖:
Ⅵ 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語言」和「c++語言」如何用二維數組做形參
二維數組做形參?C++的數組用形參的時候非常之弱,你確定你需要它?
N維數組做形參必須指定後n-1維的大小,不然編譯器無法知道如何使用它,
如
void func(int a[][10]) 或 void func2(int b[][10][10])
雖然寫是可以這樣子寫,不過,其實上面那種代碼等價於
void func(int (*a)[10]) 和 void func2(int (*b)[10][10])
Ⅷ C語言怎麼以二維數組作為參數傳遞的問題
考慮要把a作為參數傳入到print中,那麼print函數就要定義一個接收二維數組的參數,那麼什麼參數能接收二維數組呢。
就是print(int (*newbuf)[3])
然後newbuf的地址就是a的地址,然後newbuf[i][j]來訪問每一個元素了
有問題繼續問哈,寫的可能不太明白
Ⅸ c語言中怎麼用二維數組作為函數參數
二維數組作為函數參數,實參可以直接使用二維數組名,在被調用函數中對形參數組定義可以指定所有維數的大小,也可以省略第一維的大小說明,如:
因為從實參傳遞來的是數組的起始地址,如果在形參中不說明列數,編譯器將無法定位元素的的位置。
Ⅹ 關於c 二維數組的形參問題
在你定義f函數時,形參是一個二維數組行指針,這里的N指的是二維數組行長度,是不允許省略的,且N的長度必須和你前面定義的二維數組的行長度相等。除了用二維數組行指針,還可以直接寫成二維數組形式:
f(int array[][N]);