[問題] const array paramater

看板C_and_CPP作者 (lyle)時間13年前 (2010/11/03 11:31), 編輯推噓5(508)
留言13則, 5人參與, 最新討論串1/1
希望傳入一個array到function裡 但該array的elements的值不要被修改 我知道在定義function時可以在paramater前加個const 以下是我分別用來測試一維跟二維陣列 傳入一維: void modifyArray(const int b[]) { b[0]=3; } int main() { int a[3]={1,2,3}; modifyArray(a); return 0; } a.c: In function 「modifyArray」: a.c:5: 錯誤:assignment of read-only location 「*b」 不能修改array裡元素的值 這跟我預期的結果沒錯 =================================================== 傳入二維: void modifyArray(const int b[][3]) { b[0][0]=3; } int main() { int a[1][3]={{1,2,3}}; modifyArray(a); return 0; } a.c: In function 「modifyArray」: a.c:5: 錯誤:assignment of read-only location 「(*b)[0]」 a.c: In function 「main」: a.c:12: 警告:傳遞參數 1 (屬於 「modifyArray」)時在不相容的指標類型間轉換 a.c:3: 附註:expected 「const int (*)[3]」 but argument is of type 「int (*)[3] 為何換成二維陣列就不能這樣定義呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.163.250 ※ 編輯: wfgh 來自: 140.119.163.250 (11/03 11:32)

11/03 11:38, , 1F
去啃 #1B_2w2Uj
11/03 11:38, 1F

11/03 11:44, , 2F
gcc -Wall 跟 VS2008 /W4 都沒出現你下面那個警告說?
11/03 11:44, 2F

11/03 11:47, , 3F
可是我有出現耶!我在UNIX上跑的
11/03 11:47, 3F

11/03 11:48, , 4F
也是gcc
11/03 11:48, 4F

11/03 11:50, , 5F
那可以請問我的function的參數定義要怎麼改才可以做到我要的?
11/03 11:50, 5F

11/03 11:53, , 6F
gcc 版本是?
11/03 11:53, 6F

11/03 11:54, , 7F
gcc version 4.4.2
11/03 11:54, 7F

11/03 13:10, , 8F
裝新版的gcc看是不是bug,我也重製不出來此警告
11/03 13:10, 8F

11/03 13:12, , 9F
請問最新的版的是...?
11/03 13:12, 9F

11/03 13:13, , 10F
4.5.1
11/03 13:13, 10F

11/03 13:47, , 11F
4.5.1在linux怎摸裝?一直找不到方法........
11/03 13:47, 11F

11/03 14:00, , 12F
看你是 deb 家族還是 rpm 家族,去找編譯好的裝
11/03 14:00, 12F

11/03 14:18, , 13F
感謝樓上大大
11/03 14:18, 13F
文章代碼(AID): #1CqDUNri (C_and_CPP)