[問題] 變數的變數問題

看板C_and_CPP作者 (東)時間13年前 (2010/10/01 16:03), 編輯推噓16(16031)
留言47則, 13人參與, 最新討論串1/3 (看更多)
小弟遇到的問題:變數中還有變數 例如我宣告了五個變數: int i1, i2, i3, i4, i5; 請問有辦法寫一個迴圈設定這些變數嗎? 例如: for ( int j = 1; j <=5; j++ ) i$j = j; // i$j 表示 i1, i2,....,i5 類似這樣的方法 *這樣寫是錯的,只是舉例而已 j會隨著迴圈增加,就可以改變i1~i5的值。 我會用$是因為有些語言可以用$表示可變的變數, 印象中C/C++也有類似的方法,但是怎麼找都找不到。 所以想請問各位高手是否有這樣的方法呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.172.11

10/01 16:05, , 1F
用迴圈代替吧,int i[5];
10/01 16:05, 1F

10/01 16:05, , 2F
 陣列
10/01 16:05, 2F

10/01 16:12, , 3F
請問有不用陣列的方法嗎? 謝謝!
10/01 16:12, 3F

10/01 16:24, , 4F
這種功能通常只出現在dynamic language,
10/01 16:24, 4F

10/01 16:25, , 5F
c/c++語言本身沒有這樣的表示法
10/01 16:25, 5F

10/01 16:26, , 6F
在C#/Java可以用reflactor來處理(?) 但C/C++...
10/01 16:26, 6F

10/01 16:27, , 7F
我想得到是用巨集硬湊 XDD
10/01 16:27, 7F

10/01 16:36, , 8F
把i變成 class型態,再把*做overloading,則i*j=j應該有
10/01 16:36, 8F

10/01 16:36, , 9F
機會吧???亂猜的
10/01 16:36, 9F

10/01 16:37, , 10F
你講的就是陣列,或者是struct或class
10/01 16:37, 10F

10/01 16:48, , 11F
從沒想過的問題,或者是跟本用不到
10/01 16:48, 11F

10/01 16:51, , 12F
如果你是指用迴圈來更改變數名稱,C/C++做不到,你可以
10/01 16:51, 12F

10/01 16:51, , 13F
想想執行迴圈是在什麼時候
10/01 16:51, 13F

10/01 16:58, , 14F
要不然你也可以用指標阿
10/01 16:58, 14F

10/01 17:01, , 15F
我總覺得原 PO 是害怕拿 i[0] 這種東西當變數來運算....
10/01 17:01, 15F

10/01 17:03, , 16F
新手寫程式時常都這樣想過吧,以前教人寫程式
10/01 17:03, 16F

10/01 17:03, , 17F
對方也是在那邊想要"變數名稱"可以是變數
10/01 17:03, 17F

10/01 17:08, , 18F
std::map : 我要哭哭了..http://codepad.org/nwyEmHev
10/01 17:08, 18F

10/01 17:13, , 19F
在C++的世界裡面,不鼓勵這種Overload吧
10/01 17:13, 19F

10/01 17:15, , 20F
沒錯, 因為語法很醜, 因為優先權的關係也可能不符使用
10/01 17:15, 20F

10/01 17:15, , 21F
者所想像的, 重點是這裡是C/C++的世界, 你不照正統的
10/01 17:15, 21F

10/01 17:16, , 22F
方式來作, 反而還想借用其他語言的特性, 本來就是旁
10/01 17:16, 22F

10/01 17:16, , 23F
門左道的方法, 可以達成是沒錯, 不過要考慮到你因為這
10/01 17:16, 23F

10/01 17:16, , 24F
樣的便利付出多少代價
10/01 17:16, 24F

10/01 17:18, , 25F
還是艱苦、低階一點,用指標操作一下記憶體就好了
10/01 17:18, 25F

10/01 17:19, , 26F
那個是把i%j = j;換掉啊,這樣不如直接用i[j]算了
10/01 17:19, 26F

10/01 17:20, , 27F
原po就是不想用 [], 請看 3 樓
10/01 17:20, 27F

10/01 17:29, , 28F
不想用[]可以用指標吧
10/01 17:29, 28F

10/01 20:17, , 29F
謝謝大家的回應!看來是我記錯了,原來C/C++沒有。
10/01 20:17, 29F

10/01 20:22, , 30F
L大還把overload做出來的,真的很謝你的用心! 謝謝各位的
10/01 20:22, 30F

10/01 20:24, , 31F
建議,我會改用指標或陣列來實做。因為我對C/C++還不熟,之
10/01 20:24, 31F

10/01 20:24, , 32F
我只是把 p 大的猜想實現而已...囧
10/01 20:24, 32F

10/01 20:25, , 33F
前用shell script又有用到這樣的用法,所以才很好奇C/C++是
10/01 20:25, 33F

10/01 20:27, , 34F
否也可以這樣做。沒想到讓各位見笑了XD 真的很謝謝大家!!
10/01 20:27, 34F

10/02 00:09, , 35F
印象中有 ## 可以用
10/02 00:09, 35F

10/02 00:18, , 36F
## 只能用在常數上
10/02 00:18, 36F

10/02 00:29, , 37F
變數名稱也可以
10/02 00:29, 37F

10/02 00:30, , 38F
你寫 i##j 只會變成 ij 吧?
10/02 00:30, 38F

10/02 00:34, , 39F
我是就這題來說 0.0
10/02 00:34, 39F

10/02 00:36, , 40F
啊,是我搞錯樓上意思了
10/02 00:36, 40F

10/02 01:45, , 41F
用#define的方式可以嗎?
10/02 01:45, 41F

10/02 11:22, , 42F
#define基本是把一些符號換成另一些符號,可以用函數呼叫格式
10/02 11:22, 42F

10/02 11:23, , 43F
但無法直接定 $X,而判定$是保留字,X要替換的符號
10/02 11:23, 43F

10/02 11:28, , 44F
而且編譯器甚至會認為#define的詞應該是識別字..
10/02 11:28, 44F

10/02 11:47, , 45F
由此可見,對C/C++來說,做dialect是個難題.
10/02 11:47, 45F

10/02 13:48, , 46F
我可以問一下#和##是什麼意思嗎? 除了前置處理就沒用過了
10/02 13:48, 46F
文章代碼(AID): #1CfPNJ4S (C_and_CPP)
文章代碼(AID): #1CfPNJ4S (C_and_CPP)