Re: [問題] 請教一些觀念題(指標,容量,reference)
※ 引述《kdok123 (小天)》之銘言:
: ex1:
: int a = pow(2,31);
: cout << a; // -2147483658
: int b = pow(2,31)+1;
: cout << b; // -2147283658
: 為什麼在int的情況就無法循環呢?
pow的回傳值是浮點數
2的31次方的浮點數精準度會把1吸收掉
所以那個+1是沒有效果的
最後轉成整數,值就會一樣
解決方法是不用pow
int a = 1 << 31;
int b = (1 << 31) + 1;
: ex2:
: void test(char *&a)
: { // 問題二
: cout << sizeof(a)/sizeof(char);// 想要在函數裡知道傳進來矩陣的長度
: 試了一些方式都不成功,
: 請問有辦法達成這個功能嗎?
: }
: int main()
: {
: char a[] = {'1','2','\0'};
: char *b = "12";
: test(a);//報錯
: test(b);//正常
: //問題三:在沒有reference的情況兩個都可以傳進去,但有reference
: 後矩陣就傳不進去了,為什麼?
: return 0;
: }
可以用一些"稍微花俏一點"的macro或者template達成
但是建議還是自己傳入陣列長度吧
char * & 是 reference to a pointer to a char
a的型別是 array of 3 chars (編譯器會自動幫你在[]裡面塞上3)
兩者不是相容型別,但是array可以隱晦轉型為pointer
其值為array第一個元素的位址
在test裡實際執行的是 sizeof(char * &) / sizeof(char)
sizeof(char) 永遠等於 1
所以整個expression最終只是等於 sizeof(char * &)
這個值在不同的環境下會不同
你的 test(b) 會正常只是剛好而已
你不管傳入多長的字串 b ,回傳值都會是 sizeof(char * &)
: ex3:
: 置底十三誡的第八誡要表達什麼呢? 我編譯出來沒遇到什麼問題
: 置底十三誡的第九誡,MACRO(++x)應該也跟第八誡要表達的一樣
: 想請問這兩邊要闡述什麼樣的觀念呢?
int x = 0;
int y = (x += 1) + (x *= 2);
這會產生未定義行為
你無法保證 x += 1 還是 x *= 2 會先執行
所以不同的環境下你會得到不同的結果
y 可能會是 3 也有可能會是 1
至於macro,請考慮以下範例
#define ADD(x, y) x + y
int x = 10 * ADD(1 + 1, 1 + 1) * 5;
展開之後會變成
int x = 10 * 1 + 1 + 1 + 1 * 5;
x 最後是 17 而不是想像中的 10 * 4 * 5 == 200
加上括弧後
#define ADD(x, y) ((x) + (y))
展開結果是
int x = 10 * ((1 + 1) + (1 + 1)) * 5;
這才是你要的結果
--
Ming-Lun "Allen" Chou
Web http://AllenChou.net
Twitter http://twitter.com/TheAllenChou
LinkedIn http://www.linkedin.com/in/MingLunChou
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 75.84.49.95
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414218717.A.E9D.html
※ 編輯: cjcat2266 (75.84.49.95), 10/25/2014 14:34:23
推
10/25 14:34, , 1F
10/25 14:34, 1F
→
10/25 14:34, , 2F
10/25 14:34, 2F
→
10/25 14:35, , 3F
10/25 14:35, 3F
※ 編輯: cjcat2266 (75.84.49.95), 10/25/2014 14:36:02
推
10/25 15:21, , 4F
10/25 15:21, 4F
→
10/25 15:54, , 5F
10/25 15:54, 5F
推
10/25 17:24, , 6F
10/25 17:24, 6F
→
10/25 17:25, , 7F
10/25 17:25, 7F
→
10/25 17:26, , 8F
10/25 17:26, 8F
推
10/25 17:33, , 9F
10/25 17:33, 9F
→
10/25 17:43, , 10F
10/25 17:43, 10F
推
10/25 17:43, , 11F
10/25 17:43, 11F
→
10/25 18:04, , 12F
10/25 18:04, 12F
推
10/27 22:13, , 13F
10/27 22:13, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):