[問題] c++雙重指標

看板C_and_CPP作者 (Sylar)時間13年前 (2011/06/02 19:12), 編輯推噓6(6049)
留言55則, 11人參與, 最新討論串1/1
我們助教出了一道題: 請宣告一個字串指標陣列str_ptr_array[7]、一個二維的字串陣列str_array[7][5] ,兩者的初始值皆為"Mon", "Tue", "Web", "Thu", "Frid", "Sat", "Sun",以及 一個指向二維字串陣列的雙重指標(指標的指標)ptr。 請運用ptr將二維的字串陣列的內容值印出。 紅字部份很奇怪,str_array本身就是個雙重指標,那如何再指呢? 通常要印出就*(*(str_array+m)+n)就好了不是嗎? 他到底想叫我們幹嘛? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.169.199.219

06/02 19:18, , 1F
請至 ASM 版發問................開玩笑的
06/02 19:18, 1F

06/02 19:31, , 2F
樓上 他是從ASM版跑來的....
06/02 19:31, 2F

06/02 19:37, , 3F
Ask 你不用雙重指標,那要用什麼指標?
06/02 19:37, 3F
不然你覺得要怎麼寫? char *ptr=str_array? 無法編譯 char **ptr=str_array? 無法編譯 char *ptr=&str_array? 無法編譯 char **ptr=&str_array?無法編譯

06/02 19:40, , 4F
用指標(一個*)也行
06/02 19:40, 4F

06/02 19:41, , 5F
你要搞清楚2d-array是什麼
06/02 19:41, 5F

06/02 19:46, , 6F
2d-array並不是雙重指標...
06/02 19:46, 6F
書上有寫他是雙重指標常數 ...

06/02 20:34, , 7F
他到底想叫我們幹嘛←其實這個問題應該要問你們助教 XD
06/02 20:34, 7F
※ 編輯: d062637776 來自: 218.169.199.219 (06/02 20:54)

06/02 20:56, , 8F
你的助教想說的是「雙重指標與指標的使用」。
06/02 20:56, 8F

06/02 20:58, , 9F
即使str_array可以當成雙重指標來使用…
06/02 20:58, 9F

06/02 21:00, , 10F
你助教出的問題是基本教學題目,你必須依照他的要求去解。
06/02 21:00, 10F

06/02 21:02, , 11F
無解
06/02 21:02, 11F

06/02 21:31, , 12F
雙重指標常數<==記得之前才被這邊的人取笑.比較正確的
06/02 21:31, 12F

06/02 21:31, , 13F
說法是類指標.
06/02 21:31, 13F

06/02 21:40, , 14F
= ="
06/02 21:40, 14F

06/02 21:43, , 15F
QQ版主,在下有說錯嗎?
06/02 21:43, 15F

06/02 21:48, , 16F
沒有取笑你的意思.....大家交流一下看法而已
06/02 21:48, 16F

06/02 21:52, , 17F
06/02 21:52, 17F

06/02 22:00, , 18F
是滿怪的 char **ptr 跟 char str_array[7][5] 根本不同
06/02 22:00, 18F

06/02 22:05, , 19F
john 如果你的程式碼是正解 那麼他出的題目超出我們能
06/02 22:05, 19F

06/02 22:05, , 20F
06/02 22:05, 20F

06/02 22:06, , 21F
= =
06/02 22:06, 21F

06/02 22:07, , 22F
純推johnhmj.
06/02 22:07, 22F

06/02 22:09, , 23F
@@ 應該不至於吧 要知道在雙重指標下 要有指標
06/02 22:09, 23F

06/02 22:09, , 24F
有指標才能指向呀
06/02 22:09, 24F

06/02 22:10, , 25F
而且在C/C++裡 array 是 連續的記憶體呀
06/02 22:10, 25F

06/02 22:11, , 26F
兩者的初始值皆為... <-- 這才是關鍵
06/02 22:11, 26F

06/02 22:13, , 27F
當你用 ptr 指向 str+ptr_array[] 和 str_array時候
06/02 22:13, 27F

06/02 22:13, , 28F
deference的方式 是不一樣的~ so 你要跳的間隔不一樣
06/02 22:13, 28F

06/02 22:17, , 29F
*(*(str_array+m)+n) 這是用什麼方式印出來?
06/02 22:17, 29F
m,n是正整數

06/02 22:18, , 30F
johnhmj 的 std::cout << ptr[i] << std::endl; 這個呢?
06/02 22:18, 30F

06/02 22:20, , 31F
看不懂 static_cast 在做什麼也沒關係, 把 johnhmj提供
06/02 22:20, 31F

06/02 22:20, , 32F
的版本, 改寫成你能力範圍且看得懂的那個版本就好.
06/02 22:20, 32F

06/02 22:50, , 33F
06/02 22:50, 33F

06/02 23:24, , 34F
真好, 都有解答. XDDD
06/02 23:24, 34F
我把助教的題目完整放上來好了 請宣告一個字串指標陣列str_ptr_array[7]、一個二維的字串陣列str_array[7][5] ,兩者的初始值皆為"Mon", "Tue", "Web", "Thu", "Frid", "Sat", "Sun",以及一個指 向二維字串陣列的雙重指標(指標的指標)ptr。 1. 請運用ptr將二維的字串陣列的內容值印出。 2. 請將字串指標陣列的內容值印出。 所以他是要同時把兩種都求出內容 如果不用ptr的話 如果要求用指標方式輸出正常我就這樣寫: #include <iostream> #include <cstdlib> #define x "Mon","Tue","Web","Thu","Frid","Sat","Sun" using namespace std; int main(void) { char *str_ptr_array[7]={x},str_array[7][5]={x}; for(int i=0;i<=6;i++) { cout<<"str_ptr_array["<<i<<"]="<<str_ptr_array[i]<<endl; cout<<"str_array["<<i<<"]="<<*(str_array+i)<<endl; } system ("pause"); return 0; } 如果用ptr紅字部分我就不知如何下手 ※ 編輯: d062637776 來自: 218.169.199.219 (06/02 23:46)

06/02 23:37, , 35F
所以我都做完了XD
06/02 23:37, 35F

06/02 23:38, , 36F
firejox的答案才是正確,兩個二維用ptr去指出來,顯示兩次
06/02 23:38, 36F

06/02 23:41, , 37F
str_ptr_array要用ptr印出,str_array也要用ptr印出。
06/02 23:41, 37F

06/03 00:23, , 38F
他到底想叫我們幹嘛? ...
06/03 00:23, 38F

06/03 00:23, , 39F
他要你把ptr指到新的mem print之後再free掉...
06/03 00:23, 39F

06/03 00:29, , 40F
需求不明確, 你可能還需要跟助教talk talk
06/03 00:29, 40F

06/03 00:32, , 41F
我都PO code了 你還是不能理解嗎
06/03 00:32, 41F

06/03 00:33, , 42F
二維的字串陣列 ← 這個就錯了, 題目還有需要繼續做下
06/03 00:33, 42F

06/03 00:33, , 43F
去嗎?
06/03 00:33, 43F

06/03 00:34, , 44F
std::string array[ ? ][ ? ]; 這才是二維字串陣列
06/03 00:34, 44F

06/03 00:34, , 45F
原來是題目問題...
06/03 00:34, 45F

06/03 00:36, , 46F
未達工業標準... 想玩 慢慢玩吧...
06/03 00:36, 46F

06/03 10:13, , 47F
所以firejox是好人(發卡)
06/03 10:13, 47F

06/03 15:30, , 48F
str_ptr_array 不需使用ptr印出 只有str_array需要吧
06/03 15:30, 48F

06/03 15:31, , 49F
f大這串我不懂dual_ptr = (char**)malloc(7*sizeof(char*));
06/03 15:31, 49F

06/03 15:31, , 50F
可否請您 再說明一下 感恩^^
06/03 15:31, 50F

06/03 15:59, , 51F
「配置一塊(七個)字元指標空間給雙重指標」
06/03 15:59, 51F

06/03 18:19, , 52F
str_ptr_array 會用ptr印出是要讓他知道 要有指標給雙重
06/03 18:19, 52F

06/03 18:21, , 53F
指標,雙重指標才能存取實際內容。
06/03 18:21, 53F

06/03 18:21, , 54F
還有一部份是個人美觀XD
06/03 18:21, 54F
根據我的研究 這才是助教要的答案... #include <iostream> #include <cstdlib> #define x "Mon","Tue","Web","Thu","Frid","Sat","Sun" using namespace std; int main(void) { int k=0; char *str_ptr_array[7]={x},str_array[7][5]={x}; char *p=str_array[0],**ptr=&p; for(int i=0;i<=6;i++) cout<<"str_ptr_array["<<i<<"]="<<str_ptr_array[i]<<endl; for(int j=0;j<=30;j=j+5) cout<<"str_array["<<k++<<"]="<<*ptr+j<<endl; system ("pause"); return 0; } 紅字是重點 ※ 編輯: d062637776 來自: 61.223.248.39 (06/03 21:47)

06/03 21:59, , 55F
真好, 還幫我們標出重點.
06/03 21:59, 55F
文章代碼(AID): #1Dvt0VDq (C_and_CPP)