看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《CindyLinz (Cindy Wang)》之銘言: : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 210.242.246.249 : → james732:第二個方法的記憶體好像比較接近 int array[15000][40]; 06/25 22:53 : 推 VictorTom:小弟我每次要寫第二種方法那種pointer的宣告都要試誤個 06/25 23:04 : → VictorTom:半天....Orz 06/25 23:04 : → james732:其實第二個我也沒用過....XDD 06/25 23:05 : 推 ledia:!! 06/25 23:10 : → loveme00835:注意(2)的最低維一定要是個正整數常數, 這兩個不等價 06/25 23:43 : → loveme00835:應該說除了最高維以外都要 06/25 23:49 : 推 somi:問 要怎麼把vim的syntax coloring貼到bbs上啊 06/26 01:31 : → loveme00835:自己打色碼 06/26 01:32 : → CindyLinz:pietty 的「貼上指定格式」 06/26 13:14 : → angleevil:用第一個吧!總覺得第二個散發未定義的氣息... 06/26 14:15 : 推 purpose:http://msdn.microsoft.com/en-us/library/kewsb8ba.aspx 06/26 14:21 : → purpose:缺點就是板主妹說得那樣,如果要 new 出一個多維陣列 06/26 14:22 : → purpose:那麼其他維度要受限制,不能用成變數,在 Runtime 才去決 06/26 14:23 : → purpose:定。反之,第一種方法可在 Runtime 決定 06/26 14:23 : → angleevil:我剛剛看了purpose的連結,它說第一維的空間可以為0 06/26 14:37 : → angleevil:~"~這樣設計的邏輯在? 06/26 14:37 它說明寫說可以得到一個 unique pointer :p 大概可以用來當作 in-process 的一種 uuid 用吧 XD 大小為 0 的陣列, 如果不是用在 allocate 記憶體的話, 以前修資料庫系統的時候, 我在作業的範例程式裡面看到類似這樣的用法: #include <stdio.h> typedef struct { int heap[1024]; int stack[0]; } data_t; int main(){ data_t data; int i; for(i=0; i<1024; ++i) data.heap[i] = i; printf("%d\n", data.stack[-1]); /* 1023 */ printf("%d\n", data.stack[-10]); /* 1014 */ printf("%d\n", data.stack[-1000]); /* 24 */ printf("%d\n", data.stack[-1024]); /* 0 */ return 0; } 也就是可以把 stack 當成一個 index 方向倒過來的陣列用, 而且 stack 本身沒有額外佔空間. (額外用一個 int* 的話會佔一個指標的空間) : → firejox:我記得那是很神奇的東西...XD 06/26 14:45 : → firejox:其實還有一個是 int *array = new int[15000*40]; 06/26 14:52 : 推 purpose:第一維的大小為 0 大概是指標,不重要 06/26 16:16 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.242.246.249
angleevil:真的是神奇的東西,其實我在精華區或討論,看過ㄧ堆 06/26 17:16
angleevil:但是每次得到感受是驚奇阿... 06/26 17:16
loveme00835:就說是未定義行為.... 06/26 21:46
xatier:struct hacking 06/27 10:20
※ 編輯: CindyLinz 來自: 210.242.246.249 (09/10 13:18)