看板 C_and_CPP 關於我們 聯絡資訊
請問大家,我寫一個程式如下: #include<iostream> using namespace std; void PrintArray(int* a); int main( ) { int Num[2][5] = { 1,2,3,4,5, 6,7,8,9,10}; PrintArray(Num+5); // 這裡編譯有誤: // cannot convert `int (*)[5]' to `int*' // for argument `1' to `void PrintArray(int*)' getchar( ); return 0; } void PrintArray(int* a) { for(int i=0;i<5;i++) cout << a[i] <<" " ; } 但是,在我宣告Num[2][5]時,記憶體應該會是線性儲存變數: 1,2,3,4,5,6,7,8,9,10 我是將陣列名Num當成是指向第一個數字的指標, 所以我將Num+5之後應該就是指向6這個數字的指標, 然後再傳入PrintArray(int* a)試著將它印出. 但是編譯有誤, 請問我哪個觀念想錯? 感謝大家~~~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.64.114.55
plover:cannot convert `int (*)[5]' to `int*' 02/16 22:19
freehaha:這..強轉其實就可以了, 你的觀念並沒有錯 02/16 22:21
freehaha:只是compiler 比較strict 而已, 當然全部用一維陣列自己 02/16 22:23
freehaha:index 也可以, 我通常選擇後者. 02/16 22:23
uncleuse:原來如此, 感謝回答!! 02/17 10:02
VictorTom:應該有差吧? print 指標 Num+5 和 Num[1] 試試看 @_@" 02/17 12:30
VictorTom:記憶體是連續的觀念沒錯, 但是Num是2D ptr的時候.... 02/17 12:30
VictorTom:Num + CONST後的位置會指到的地方不太對吧....?_? 02/17 12:31
VictorTom:或者如你所想的試試Num+5 vs (int*)Num+5 的值 ?_? 02/17 12:33
uncleuse:記憶體位址真的不一樣... 02/17 17:22
uncleuse:請問宣告Num[2][5]之後, Num[1]是誰的位址呢? 02/17 17:25
uncleuse:還有(int*)Num是什麼意思呢? 02/17 17:26
uncleuse:我剛初學, 還請大家多多指教~~謝謝!!!! 02/17 17:28
pinchieh:PrintArray(int** a) { printf("%d", *(*(a+1)+0));} 02/17 17:56
pinchieh:main() { ... PrintArray(Num); ... } 02/17 17:58
VictorTom:樓上的一樣有error, cannot convert `int (*)[5]' to 02/17 18:05
VictorTom:`int**' for argument `1' to `int PrintArray(int**)' 02/17 18:06
VictorTom:而且這種解析2D ptr的方式總覺得很危險會有問題....Orz 02/17 18:13
pinchieh:#include <stdio.h> 02/17 19:49
pinchieh:void PrintArray(int array2D[][5]); 02/17 19:49
pinchieh:int main(int argc, char *argv[]) 02/17 19:49
pinchieh:{ 02/17 19:49
pinchieh:int Num[2][5] = {{1, 2, 3, 4, 5},{ 6, 7, 8, 9, 10}}; 02/17 19:50
pinchieh:PrintArray(Num); 02/17 19:50
pinchieh: return 0; 02/17 19:50
pinchieh:} 02/17 19:50
pinchieh:void PrintArray(int array2D[][5]) 02/17 19:50
pinchieh:{ printf("%d \n", *(*(array2D+1)+0)); } 02/17 19:51
uncleuse:所以是不是說當我宣告Num[2][5]時 02/17 21:21
uncleuse:Num這個變數名代表一個指標 02/17 21:24
uncleuse:且這個指標指向一個有兩個元素之陣列的開頭 02/17 21:26
uncleuse:而這個陣列裡的兩個元素都是指標變數 02/17 21:27
uncleuse:且這兩個指標變數分別指向另兩個陣列的開頭 02/17 21:29
uncleuse:這兩個陣列裡都存有5個int型態的整數 02/17 21:30
uncleuse:這樣的觀念對不對? 02/17 21:30
uncleuse:很感激大家的回答~~ 02/17 21:31
pinchieh:請看c primer 02/17 21:33
freehaha:的確是我解釋不周到:p 有謝Tom 指正, 推 02/18 02:19