Re: [問題] 二維陣列回傳問題

看板C_and_CPP作者 (拋磚引玉)時間14年前 (2010/05/28 21:03), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/3 (看更多)
matrix是一個 3x3矩陣 在傳參數的時候是不可以傳陣列的,所以他會decay成 int(*)[3] ( pointer to int [3] ) 我的第一個疑問點是 直接把這個 int (*)[3] 變成 int ** ,這我怎麼看都覺得很奇怪阿 第二個疑問點是 你的receive是個 int *[3] ,可是他卻要接一個 int **,這我還是覺得很奇怪阿 Orz ( array containing int* ) 第三個點是 int(*)[3] 和 int*[3] 都不能拿來回傳,可是你拿 int** 回傳我反而不懂這是什麼意思 我完全搞混於大大的design,所以才想說有沒有考慮換一個方式 int(*)[3] 和 int*[3] 是不一樣的 我的意思是,為何不把你把main那邊的設計改掉呢 :) 看receive是要接什麼工作你手動去做一下 (跑迴圈或是改用其他型態等等的) Ex: void matrix_add(int (*)[3],int); main() { int a,b; int *receive[3]; // todo int matrix[3][3]={{0},{0},{0}}; for(b=0;b<3;b++) { printf("add:\n"); scanf("%d",&a); matrix_add(matrix,a); ... // todo ※ 引述《jack58 (願主陪著你)》之銘言: : 我想請問一下 二維陣列回傳到main function中要如何回傳? : 我一直嘗試一個二維的回傳都會產生下列問題 : error: cannot convert 'int (*)[3]' to 'int**' : 以下是我嘗試的小程式 : #include<stdio.h> : #include <stdlib.h> : #include<math.h> : #include<time.h> : int **matrix_add(int *[3],int); : main() : { : int a,b; : int *receive[3]; : int matrix[3][3]={{0},{0},{0}}; : for(b=0;b<3;b++) : { : printf("add:\n"); : scanf("%d",&a); : receive=matrix_add(matrix,a); : printf(" %d %d %d \n",receive[0][0],receive[1][0],receive[2][0]); : } : } : int **matrix_add(int *mat[3],int value) : { : int i,k; : for(k=0;k<3;k++) : { : for(i=0;i<3;i++) : { : *(*(mat+i)+k)=*(*(mat+i)+k)+value; : } : } : return mat; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.93.39

05/28 21:08, , 1F
我主要是要試receive而已 看他怎麼寫能接收二維陣列位置
05/28 21:08, 1F

06/04 21:31, , 2F
回推一下,int(*)[3]是個指標可以被回傳,文中講錯了
06/04 21:31, 2F

06/04 21:31, , 3F
寫法要用 int (* func_name(...) ) [3] 這樣
06/04 21:31, 3F
文章代碼(AID): #1B_xyG2D (C_and_CPP)
文章代碼(AID): #1B_xyG2D (C_and_CPP)