[討論] NV的考題 似interger promotion

看板C_and_CPP (C/C++)作者 (nikeasyanzi)時間12年前 (2013/11/11 01:31), 編輯推噓4(4026)
留言30則, 9人參與, 最新討論串1/1
小弟日前去NV 面試 考了一題 在考場以為是強制型別轉換 但回家發現好像是integer promotion code 大概如下 char aaa[]={0x01,0x02,x0x03,...,0x09}; int *p=(unsigned char) aaa; printf("0x%8x,0x%8x",*p,*(p+1)); 好像是這樣 記得不是很清楚 但大概是這意思 把char arr 由int pointer 去指 (版上有其他強者也去考的嗎? 煩請指正) 我後來去找了一下 網路上的說明 看到這個 在stackoverflow的網址 http://0rz.tw/EeFhs 想請問一下 是不是就是如網頁內 ams在 Jul 4 at 12:48 回的那個解說一樣 解說在此 http://0rz.tw/m8kls 來解這問題? 但 版上各位強者 可以解答NV考的這段code 嗎? 問得七零八落 還請包涵@@ -- CyberPanel 5000CP 換 NT.500 http://myurl.com.tw/05bd EmailCash 5000e 換 NT.500 http://myurl.com.tw/rgdq -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.239.80.247 ※ 編輯: nikeasyanzi 來自: 36.239.80.247 (11/11 01:44) ※ 編輯: nikeasyanzi 來自: 36.239.80.247 (11/11 02:01)

11/11 02:11, , 1F
%08x?
11/11 02:11, 1F

11/11 02:14, , 2F
跟promotion無關 這是不同型別的指標加法運算
11/11 02:14, 2F

11/11 02:15, , 3F
還有endian的問題
11/11 02:15, 3F

11/11 02:48, , 4F
*(p+1) 吧?
11/11 02:48, 4F
※ 編輯: nikeasyanzi 來自: 140.113.136.221 (11/11 14:37)

11/11 15:59, , 5F
問題很多 先要問sizeof(char) sizeof(int)多大
11/11 15:59, 5F

11/11 16:00, , 6F
然後big還是little endian
11/11 16:00, 6F

11/11 16:02, , 7F
可以宣告個int a給值 拿個char指標指到他 然後印出看看
11/11 16:02, 7F

11/11 18:02, , 8F
(unsigned char) aaa 這東西就 error 了吧
11/11 18:02, 8F

11/12 14:16, , 9F
樓上 並不會 aaa本身是個指標位置 可以這樣轉沒問題
11/12 14:16, 9F

11/12 14:19, , 10F
只是這邊語意上有誤 應該是(unsigned char*)aaa才對
11/12 14:19, 10F

11/12 14:46, , 11F
sizeof(char)照標準應該是1,此外pointer轉char不能說沒問題
11/12 14:46, 11F

11/12 15:13, , 12F
語意上沒問題啊 你是沒計算過2指標間差值嗎
11/12 15:13, 12F

11/12 15:13, , 13F
打錯 文法上沒問題
11/12 15:13, 13F

11/12 15:14, , 14F
另外標準是1? 哪裡的標準啊?
11/12 15:14, 14F

11/12 15:21, , 15F
C99 6.5.3.4 規定要是 1, 指標相減跟轉型差很多.....
11/12 15:21, 15F

11/12 15:22, , 16F
pointer 轉 char 要看實作, 不一定會讓你過
11/12 15:22, 16F

11/12 15:22, , 17F
不然你有算過指標相加嗎?
11/12 15:22, 17F

11/12 15:24, , 18F
有阿 本篇的p+1不就是嗎
11/12 15:24, 18F

11/12 15:24, , 19F
那個 1 不是指標吧......
11/12 15:24, 19F

11/12 15:25, , 20F
另外那是c99標準 不是所有程式都是c99
11/12 15:25, 20F

11/12 15:26, , 21F
11/12 15:26, 21F

11/12 15:28, , 22F
你給的連結就在說 sizeof(char)是1 阿..只是1byte != 8bits
11/12 15:28, 22F

11/12 15:28, , 23F
好吧看起來應該都是1沒錯拉 只是我記得不一定都是8bit
11/12 15:28, 23F

11/12 15:38, , 24F
另外我剛打太快 p+1的1是sizeof(*p)才對
11/12 15:38, 24F

11/12 15:41, , 25F
要算記憶體位置不是應該先轉嗎? 不然怎算?
11/12 15:41, 25F

11/12 18:48, , 26F
其實 ANSI/ISO C (C89/C90) 也定義 sizeof(char) 是 1;
11/12 18:48, 26F

11/12 18:52, , 27F
甚至 K&R C 2ed(1988)也同定義; 1ed(1978)則說現有實作都是1.
11/12 18:52, 27F

11/15 00:21, , 28F
#1GKp_dPx 這篇看完應該就差不多了。
11/15 00:21, 28F

11/19 00:49, , 29F
感謝EdisonX大 我完全懂了XDXD 大感謝!^^"
11/19 00:49, 29F

11/19 00:49, , 30F
因為前幾位大大在討論的 其實我不大懂 囧
11/19 00:49, 30F
文章代碼(AID): #1IVyBeCh (C_and_CPP)
文章代碼(AID): #1IVyBeCh (C_and_CPP)