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

看板C_and_CPP作者 (願主陪著你)時間14年前 (2010/05/28 20:03), 編輯推噓4(4020)
留言24則, 5人參與, 最新討論串1/3 (看更多)
我想請問一下 二維陣列回傳到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; } --

03/25 20:32,
Λ_Λ
03/25 20:32

03/25 20:34,
咻 ー <丶‵∀′> 路過,大家繼續
03/25 20:34

03/25 20:46,
 =〔~∪ ̄ ̄〕
03/25 20:46

03/25 20:54,
= ◎──◎
03/25 20:54

03/25 20:57,
路路路路路路路路路路路路路 路路路路路路路路X
03/25 20:57

03/25 21:04,
路路路路路路路路路路路路路 陸路陸路陸路陸
03/25 21:04
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.28.236

05/28 20:25, , 1F
你的函式中直接就有改到mat陣列啦,幹嗎還要回傳 @_@?
05/28 20:25, 1F

05/28 20:25, , 2F
不是都已經當參數拿過去改了嗎
05/28 20:25, 2F
※ 編輯: jack58 來自: 140.123.28.236 (05/28 20:29)

05/28 20:30, , 3F
因為receive要用
05/28 20:30, 3F

05/28 20:31, , 4F
題外話: 我的意思是說何不改變一下設計
05/28 20:31, 4F

05/28 20:34, , 5F
那就把function的回傳型態改成 int (*)[3] 這樣吧XD
05/28 20:34, 5F

05/28 20:34, , 6F
待強者解吧,無意冒犯,但我覺得這種回傳法很彆扭...
05/28 20:34, 6F

05/28 20:35, , 7F
參數傳進去int(*)[3] 又要轉成int**回傳 最後再用int*[3]
05/28 20:35, 7F

05/28 20:35, , 8F
接 為什麼不直接操作就好了 XD
05/28 20:35, 8F

05/28 20:36, , 9F
而且int(*)[3]轉成int** 操作上會有問題吧 @_@
05/28 20:36, 9F

05/28 20:37, , 10F
我會這樣寫是因為我另有用途 這樣寫只是測試看看而已 :p
05/28 20:37, 10F

05/28 20:40, , 11F
如果要修改是把副函式中的 int** 改成 int *[3] ?
05/28 20:40, 11F

05/28 20:41, , 12F
我是希望測試呼叫韓式回傳二維陣列位置 所以這樣寫
05/28 20:41, 12F

05/28 20:43, , 13F
int[3][3]應該是變成int(*)[3] 不是int*[3] 我試試
05/28 20:43, 13F

05/28 20:46, , 14F
二維陣列並不是 int **
05/28 20:46, 14F

05/28 20:49, , 15F
??
05/28 20:49, 15F

05/28 20:51, , 16F
剛沒看到 receive 的type, 那我說的那樣不行....
05/28 20:51, 16F

05/28 20:51, , 17F
如果你一定要這麼寫的話 return (int **)mat; 就解決了
05/28 20:51, 17F

05/28 20:51, , 18F
只是, receive 是 3個 int*, 原po這樣寫肯定compile不會
05/28 20:51, 18F

05/28 20:52, , 19F
過的, 你的 receive 到底是要用來幹麻的呀?_?
05/28 20:52, 19F

05/28 20:54, , 20F
receive是接傳回來的位置用的 還是我想錯了@@?
05/28 20:54, 20F

05/28 20:56, , 21F
我想用receive來接matrix_add傳回來的位置 不知是否想錯了?
05/28 20:56, 21F

05/28 20:58, , 22F
實測的結果, int (*)[3] 不能當return type, 很直覺的以
05/28 20:58, 22F

05/28 20:58, , 23F
為可以當傳入參數就可以當回傳參數的....Orz
05/28 20:58, 23F

05/28 21:57, , 24F
可以試試看用int**宣告動態配置陣列>_<
05/28 21:57, 24F
文章代碼(AID): #1B_x4HD2 (C_and_CPP)
文章代碼(AID): #1B_x4HD2 (C_and_CPP)