1樓:仙戈雅
#include
using namespace std;
class foo
;foo::foo()
foo::~foo()
// 返回指向二維陣列的指標函式
int ** foo::test2darray(unsigned r, unsigned c)
}return arr2d;
}int main()
cout << endl;
}// 釋放記憶體
for (int i = 0; i < 3; i++)delete arr2d;
delete foo;
return 0;}
2樓:匿名使用者
c++中函式不能直接返回二維陣列,但可以返回函式指標
3樓:千鋒教育
不要把二維陣列與二維指標混淆在一起,他們是不同的意義的。
指標是指標變數的簡稱,它可以儲存「資料」的地址。
無論是幾維的陣列,陣列名只不過是一個地址的代號,好比是一個樓的樓號(相當於地址),它不能被改變,可以賦給任何型別的指標變數(因為指標變數中存的是地址,在一個計算機中,地址所佔的空間是一樣的,所以,可以隨意賦值),但根據指標變數的型別的不同,在引用時會有不同的結果表現,用不好就會「死掉」。
儘量不要使用區域性變數的返回引用,這樣不可靠。如你的例子:當a函式結束後,原則上b所處的位置的資料系統就不保證了,如果有別的程式用,你的b空間裡的資料就可能被覆蓋了。
如果非要用,建議這樣:int *a(); return b;}
如果你返回的二維陣列是一個固定大小的,那麼,就在呼叫者程式中,建立陣列,通過引數傳遞過去進行賦值
c語言函式中怎麼返回一個二維陣列
4樓:浪小客
1、我們首先定義一個二級指標和一個行列變數[int ** array,row,column;]。
2、然後我們編寫進入行和列的語句,**如圖所示。
3、接下來我們可以用一維陣列開啟一維一維陣列。
4、接下來,我們使用[array [i] =(int *)malloc(sizeof(int)* column);]來為陣列再次生成包含該陣列的新陣列。
5、然後我們可以為它賦值並輸出[**如圖所示]。
6、執行程式後我們可以看到這種效果。
5樓:
需要動態申請的啊,堆疊上面的陣列是不能直接返回的會在函式退出的時候銷燬掉
#include
int **returnnum()
}return a;//error: cannot convert `int (*)[5]' to `int**' in return
} int main()
printf("\n");
free(cpy[i]);
}free(cpy);
return 0;}
6樓:手機使用者
#include int *_print(int (*_pointer)[2],int n);void main(void),}; int *p,row; printf("請輸入行號實參是二維陣列名 printf("%d\n",*(p+1)); // 輸出row行1列的元素}/* 定義指標函式_print 形參是指向由2個元素組成的一維陣列的指標 函式返回值是 地址*/int *_print(int (*_pointer)[2],int n)
希望對你能有所幫助。
7樓:匿名使用者
c語言中函式不能直接返回一個二維陣列。但是可以通過其他方法實現類似功能:
1、把二維陣列定義為全域性變數 這樣可以直接在另一個函式中呼叫2、把二維陣列作為指標傳入到第一個函式中 然後同樣作為指標傳到另一個函式中
3、動態分配記憶體 在賦值函式中動態分配 並用返回值返回,在另一個函式中進行訪問
8樓:使用氟
c語言無法返回空間,只能返回指標。
函式內動態申請,返回指標,缺點是容易出現野指標,根據誰申請誰釋放原則。
設定全域性引數,缺點全域性資料稍微多了一些,而且破壞封裝思想。
c++中二維陣列作為引數傳遞到一個函式
9樓:問明
方法1、 第一維的長度可以不指定;但必須指定第二維的長度。
#include
void print_a(int a[5], int n, int m)
int i, j;
for(i = 0; i < n; i++)for(j = 0; j < m; j++)printf("%d ", a[i][j]);
printf("\n");
方法2、指向一個有5個元素一維陣列的指標。
void print_b(int (*a)[5], int n, int m)
int i, j;
for(i = 0; i < n; i++)for(j = 0; j < m; j++)printf("%d ", a[i][j]);
printf("\n");
方法3、利用陣列是順序儲存的特性。
void print_c(int *a, int n, int m)int i, j;
for(i = 0; i < n; i++)for(j = 0; j < m; j++)printf("%d ", *(a + i*m + j));
printf("\n");
int main(void)
int a[5][5] = , , , , };
printf("\n方法1:\n");
print_a(a, 5, 5);
printf("\n方法2:\n");
print_b(a, 5, 5);
printf("\n方法3:\n");
print_c(&a[0][0], 5, 5);
getch();
return 0;
10樓:楊柳風
可以傳遞二維陣列作為引數,有兩種方法,
方法一change(int **a)直接傳遞一個指標進去方法二change(int a[10])陣列的第二維維度一定要顯式指定
假如主函式有一個二維陣列int a[10][18];
寫一個函式要傳遞二維陣列,函式原型應該是這個樣子void f(int (*)a[18]);
或者 void f(int a[18]) 必須確定第二維長度是多少
c語言的函式返回值,c語言中,函式返回值怎麼用?
所謂返回值,就是人們想要知道函式或者程式所得到 的結果而設計的函式或者程式結束時給出一個值。比如 我們編寫一個加法函式,肯定想知道加完過後的結果是什麼,那麼我們就指定這個結果為該加法程式的返回值。關於返回值的返回 1 函式呼叫語句本身代表其返回值 例如 fun a 那麼 fun a 就是這個返回值。...
php類中定義了函式怎麼使用它,php類中定義了一個函式,怎麼使用它?
php類中定義的函式有幾種,例如 class a 受保護的方法 protected function test2 靜態方法 static function st 私有方法 private function test3 內部訪問 public function use 外部呼叫方法 a new a a...
C 成員函式的使用有哪些限制,C 類成員函式什麼情況下必須定義引數?
必須為其指標所指向的物件分配記憶體才可以進行strcpy操作。如果沒有分配記憶體,則 strcpy pname,p 把p複製到 沒有記憶體存放!這可能會導致未知的情況發生,程式會崩潰.以下是修改後的程式。注 用構造分配記憶體 new 必須要用析構 delete 釋放記憶體,否則會造成記憶體洩露 me...