評價: 0 回應: 7 閱覽: 167
置頂

C函式傳入二維陣列

先附上程式碼

#include <stdio.h>
#include <stdlib.h>
 
void printfLegal(int *array);
 
void main(void) {
	int i,array[10][3];
	srand((unsigned)time(NULL));
	for(i=0;i<10;i++){
		array[i][0]=rand()100+1;
		array[i][1]=rand()10+1;
		array[i][2]=rand()5+1;
	}
	printfLegal(array);
}
 
void printfLegal(int *array){
	int i;
	for(i=0;i<10;i++){
		printf("d d d\n",*(array+i*3+0),*(array+i*3+1),*(array+i*3+2));
	}
}

跑出來結果似乎是正確的
不過有出現警告如下:

第14行:[Warning] passing argument 1 of 'printfLegal'
from incompatible pointer type

第4行:[Note] expected 'int *' but argument
is of type 'int (*)[3]'

看了很久還是不懂為什麼會跳出來這些訊息

可以請大家指點一下嗎? 

熱門回應

洪峻龍  廖麗華

游世杰  黃齡微

彭瑞華  黃巧筑

柯展裕  洪秀柱

李家臻  黃偉庭

另外,我看不懂

for(i=0;i<10;i++){
        array[i][0]=rand()100+1;
        array[i][1]=rand()10+1;
        array[i][2]=rand()5+1;
    }

不適應該寫成 ==>

for(i=0;i<10;i++){
        array[i][0]=rand(100)+1;
        array[i][1]=rand(10)+1;
        array[i][2]=rand(5)+1;
    }

好幾種改法

void printfLegal(int *array)

==>

void printfLegal(int **array)

void printfLegal(int *array[])

void printfLegal(int array[][3])

yes

yes

感謝分享

int [10][3] 跟 int *其實是不同的東西

改這樣int (*array)[3]

也可以傳int array[][3],這兩個等價

函數不能傳或返回陣列,但可以傳或返回陣列的指標

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言