[問題] #define function 傳 array
請問各位大大,我定義一個 #define function 如下:
#define func(tmp) do{ \
int* bitmap = (int*)tmp; \
for(int i=0; i<3; i++) bitmap[i]+=2; \
}while(0)
宣告一個 struct:
struct AAA{
int bitmap[3]={0,1,2};
};
這時候,我搞不懂如果我在 main 裡 呼叫 func(),因為只是做程式碼替換,
不做型別檢查,所以以下兩種呼叫,執行結果都正確,但是想不通為什麼!?
Case1: 我認為正確的呼叫方式!
int main() {
AAA obj;
for(int i=0; i<3; i++)
cout<< obj.bitmap[i] <<endl;
cout <<endl;
func(obj.bitmap);
for(int i=0; i<3; i++)
cout<< obj.bitmap[i] <<endl;
cout <<endl;
}
執行結果:
0
1
2
2
3
4
沒啥問題!~
Case2: 我認為錯誤的呼叫方式:
int main() {
AAA obj;
for(int i=0; i<3; i++)
cout<< obj.bitmap[i] <<endl;
cout <<endl;
// 再取址一次
func(&obj.bitmap);
for(int i=0; i<3; i++)
cout<< obj.bitmap[i] <<endl;
cout <<endl;
}
怎麼結果還是:
0
1
2
2
3
4
沒錯耶!?????
結果顯示跑出來的結果竟然都正確? 為什麼?
把 #define 換回傳統 function call / function return:
void func(int* tmp){
int* bitmap = (int*)tmp;
for(int i=0; i<3; i++) bitmap[i]+=2;
}
這樣就符合期待了,只有 Case 1 能正確運作,Case 2 在compile階段就換判錯。
請問有誰知道是怎回事嗎?
感恩!~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.24.158
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1514544425.A.978.html
※ 編輯: kkroy (59.120.24.158), 12/29/2017 18:53:48
推
12/29 18:53,
8年前
, 1F
12/29 18:53, 1F
推
12/29 18:54,
8年前
, 2F
12/29 18:54, 2F
※ 編輯: kkroy (59.120.24.158), 12/29/2017 18:56:05
→
12/29 18:57,
8年前
, 3F
12/29 18:57, 3F
推
12/29 19:05,
8年前
, 4F
12/29 19:05, 4F
→
12/29 19:05,
8年前
, 5F
12/29 19:05, 5F
→
12/29 19:08,
8年前
, 6F
12/29 19:08, 6F
→
12/29 19:09,
8年前
, 7F
12/29 19:09, 7F
→
12/29 23:34,
8年前
, 8F
12/29 23:34, 8F
→
12/29 23:34,
8年前
, 9F
12/29 23:34, 9F
推
12/30 00:08,
8年前
, 10F
12/30 00:08, 10F
→
12/30 00:08,
8年前
, 11F
12/30 00:08, 11F
→
12/30 00:09,
8年前
, 12F
12/30 00:09, 12F
→
12/30 08:42,
8年前
, 13F
12/30 08:42, 13F
→
12/30 09:25,
8年前
, 14F
12/30 09:25, 14F