Re: [問題] 變數的變數問題

看板C_and_CPP作者 (今、そこに いる僕)時間13年前 (2010/10/02 01:31), 編輯推噓15(15015)
留言30則, 11人參與, 最新討論串2/3 (看更多)
※ 引述《mingco (東)》之銘言: : 小弟遇到的問題:變數中還有變數 : 例如我宣告了五個變數: : 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++也有類似的方法,但是怎麼找都找不到。 : 所以想請問各位高手是否有這樣的方法呢? : 謝謝! 別說是我寫的, 這招絕對會被罵翻... #include <stdio.h> int main(int argc, char *argv[]) { int a, b, c; for(int i=0;i<3;i++) *((&a)-i)=i; printf("%d, %d, %d\n", a, b, c); return 0; } VS2005編繹結果正常, 執行也符合原PO要求。 用溢位到隔壁老王家做的...我來亂的... --               裸になって                                                   何が悪い?      -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.57.76

10/02 01:50, , 1F
太XD了....XDDD
10/02 01:50, 1F

10/02 02:12, , 2F
最佳化下去就破功了吧
10/02 02:12, 2F

10/02 02:19, , 3F
這個不錯XDDD
10/02 02:19, 3F

10/02 02:22, , 4F
a、b、c未必是連續的啊,compiler可能會塞東西進去
10/02 02:22, 4F

10/02 02:24, , 5F
有寫過類似的,沒開最佳化的結果正常,開了就會錯
10/02 02:24, 5F

10/02 03:00, , 6F
沒有取址的變數,編譯器全塞在 register 上,當然破功。
10/02 03:00, 6F

10/02 08:03, , 7F
明明就segmentation fault
10/02 08:03, 7F

10/02 09:38, , 8F
我囧.........
10/02 09:38, 8F

10/02 10:30, , 9F
那如果開個陣列,陣列元素是否一定是連續的?
10/02 10:30, 9F

10/02 10:36, , 10F
陣列是在線性位址空間(邏輯位址空間)上連續的啊
10/02 10:36, 10F

10/02 10:40, , 11F
16673那篇我試的時候是還放在記憶體,但是擺放位置跟原
10/02 10:40, 11F

10/02 10:41, , 12F
來沒開最佳化時不同
10/02 10:41, 12F

10/02 11:24, , 13F
XD 不是連續的話就囧了 對了compiler最佳化是哪家的啊?VC?
10/02 11:24, 13F

10/02 12:16, , 14F
tinlans兄請教一下,"沒有取址的變數,編譯器全塞在
10/02 12:16, 14F

10/02 12:16, , 15F
register上",這句話是什麼意思?
10/02 12:16, 15F

10/02 12:21, , 16F
假設某函數內,只有變數 int TEN=10; 函數功能是回傳參數1
10/02 12:21, 16F

10/02 12:21, , 17F
跟TEN的和,則編譯器可以把指令翻譯成 mov ecx,10 用ecx代
10/02 12:21, 17F

10/02 12:22, , 18F
表TEN,再從stack抓出參數1跟ecx相加後放到eax去回傳。
10/02 12:22, 18F

10/02 12:23, , 19F
TEN都沒有用到記憶體,除非你有寫個運算式 &TEN 才會例外
10/02 12:23, 19F

10/02 12:26, , 20F
了解,謝謝。再請教一下,這種compiler最佳化的的東西要
10/02 12:26, 20F

10/02 12:26, , 21F
去哪裡看?
10/02 12:26, 21F

10/02 12:27, , 22F
拍謝,我應該先google的。google完有問題再來請教
10/02 12:27, 22F

10/02 12:29, , 23F
一般來說是研究compiler的書會寫到,比如那個恐龍本?
10/02 12:29, 23F

10/02 12:29, , 24F
普通程式設計師做的最佳化,則是先用Profile工具分析整個
10/02 12:29, 24F

10/02 12:30, , 25F
程式,查出每個函數所花費的時間,確定某函數是效能瓶頸
10/02 12:30, 25F

10/02 12:30, , 26F
然後觀察是否寫法有錯,或者演算法需要改進,常見工具是
10/02 12:30, 26F

10/02 12:31, , 27F
Intel的 VTune或者微軟跟GNU?也都有提供
10/02 12:31, 27F

10/02 12:36, , 28F
感謝purpose兄,我立刻去看看
10/02 12:36, 28F

10/02 12:46, , 29F
這根本不行吧 就算要用隔壁老王的記憶體 也不是這樣用吧
10/02 12:46, 29F

10/02 13:51, , 30F
感謝purpose大的講解!
10/02 13:51, 30F
文章代碼(AID): #1CfXhxgl (C_and_CPP)
文章代碼(AID): #1CfXhxgl (C_and_CPP)