[問題] 指標笨問題

看板C_and_CPP (C/C++)作者 (我需要"激勵")時間16年前 (2010/01/29 11:23), 編輯推噓13(13020)
留言33則, 10人參與, 最新討論串1/1
小弟最近自學,卻一值卡在指標... 下列是用指標寫99乘法表↓ 我的問題在下面"●" 編譯器:cannot convert `int[9][9]' to `int*' in assignment #include <stdio.h> #include <stdlib.h> int main(){ int array[9][9]; int i, j; int *ptr; for(i=0;i<9;i++){ for(j=0;j<9;j++){ array[i][j]=(i+1)*(j+1); } } ptr = array; ●問題在這? 這是書本上寫的..,且我不懂這行意思= = for(i=0;i<9;i++){ for(j=0;j<9;j++){ printf("%dx%d=%d \t", i+1, j+1, *(ptr+(i*9)+j)); } printf("\n"); } system("pause"); } 我用dev編譯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.82.96

01/29 11:25, , 1F
ptr = (int *)array; <=== 簡單解
01/29 11:25, 1F

01/29 11:26, , 2F
這個範例要告訴你的是 陣列與指標的關係
01/29 11:26, 2F

01/29 11:37, , 3F
你的array是二維,但是你的指標只有一顆星星
01/29 11:37, 3F

01/29 11:37, , 4F
另一個表示法, ptr=&array[0][0]
01/29 11:37, 4F

01/29 11:38, , 5F
你的書本 真的是寫i*j嗎......
01/29 11:38, 5F

01/29 11:39, , 6F
應該是int **ptr;才對
01/29 11:39, 6F

01/29 11:43, , 7F
0.0 (i+1)*(j+1) 才對...我打錯
01/29 11:43, 7F
※ 編輯: oit73 來自: 59.112.82.96 (01/29 11:46)

01/29 11:56, , 8F
謝謝你們的指導XD,雖然對指數還是很陌生= =
01/29 11:56, 8F

01/29 11:57, , 9F
指標需要多多練習 加油囉
01/29 11:57, 9F

01/29 12:03, , 10F
找幾個盒子東西丟一丟 觀念比較快懂 直接使用太抽象了
01/29 12:03, 10F

01/29 13:01, , 11F
to love: **也不對
01/29 13:01, 11F

01/29 13:24, , 12F
這需要顯式轉換 ptr = (int**)array;
01/29 13:24, 12F

01/29 14:21, , 13F
要也該寫成 (int**)&array吧 雖說vc測好像自己會轉成對的
01/29 14:21, 13F

01/29 14:24, , 14F
測了一下**這樣無法存取耶
01/29 14:24, 14F

01/29 14:27, , 15F
他的sample看起來是順便說明靜態宣告的2維array的連續性
01/29 14:27, 15F

01/29 14:28, , 16F
轉成int **ptr的話, 要怎麼解讀memory....@_@"
01/29 14:28, 16F

01/29 15:09, , 17F
int **ptr; *ptr = *array;
01/29 15:09, 17F

01/29 15:22, , 18F
怎麼會沒辦法存取? = _ =
01/29 15:22, 18F

01/29 15:27, , 19F
int **ptr; 確實可印出結果 只是概念跟一顆 * 不一樣
01/29 15:27, 19F

01/29 15:30, , 20F
我是覺得把二維陣列 轉成 int*比較不合理啦
01/29 15:30, 20F

01/29 15:35, , 21F
怎麼印? 我cout<<**ptr 會當機
01/29 15:35, 21F

01/29 15:37, , 22F
原來是要用*ptr印阿 是因為剛好ptr=的位址就是array?所以
01/29 15:37, 22F

01/29 15:37, , 23F
一顆星就夠了?
01/29 15:37, 23F

01/29 15:43, , 24F
是滴
01/29 15:43, 24F

01/29 16:06, , 25F
靜態二維陣列轉成一維存取, 或明明想動態配置二維卻是配
01/29 16:06, 25F

01/29 16:06, , 26F
置了一維再操作指標map成二維陣列, 也不是什麼少見的作
01/29 16:06, 26F

01/29 16:07, , 27F
法, 不會比較不合理喔.
01/29 16:07, 27F

01/29 16:09, , 28F
用int **ptr去接然後用 *ptr來操作反而比較奇怪, 如果不
01/29 16:09, 28F

01/29 16:11, , 29F
是int[][], 是char[][]或short[][]的情況, 解讀起來就很
01/29 16:11, 29F

01/29 16:11, , 30F
麻煩了吧@_@"
01/29 16:11, 30F

01/29 16:15, , 31F
沒錯 @@"
01/29 16:15, 31F

01/30 11:38, , 32F
突然想到 如何不用for寫九九乘法表呢
01/30 11:38, 32F

01/30 11:46, , 33F
printf.... 光速逃XD
01/30 11:46, 33F
文章代碼(AID): #1BObIbGd (C_and_CPP)
文章代碼(AID): #1BObIbGd (C_and_CPP)