看板 C_and_CPP 關於我們 聯絡資訊
小弟日前去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)
sitos:%08x? 11/11 02:11
azureblaze:跟promotion無關 這是不同型別的指標加法運算 11/11 02:14
azureblaze:還有endian的問題 11/11 02:15
loveflames:*(p+1) 吧? 11/11 02:48
※ 編輯: nikeasyanzi 來自: 140.113.136.221 (11/11 14:37)
blackwindy:問題很多 先要問sizeof(char) sizeof(int)多大 11/11 15:59
blackwindy:然後big還是little endian 11/11 16:00
blackwindy:可以宣告個int a給值 拿個char指標指到他 然後印出看看 11/11 16:02
Ebergies:(unsigned char) aaa 這東西就 error 了吧 11/11 18:02
blackwindy:樓上 並不會 aaa本身是個指標位置 可以這樣轉沒問題 11/12 14:16
blackwindy:只是這邊語意上有誤 應該是(unsigned char*)aaa才對 11/12 14:19
Feis:sizeof(char)照標準應該是1,此外pointer轉char不能說沒問題 11/12 14:46
blackwindy:語意上沒問題啊 你是沒計算過2指標間差值嗎 11/12 15:13
blackwindy:打錯 文法上沒問題 11/12 15:13
blackwindy:另外標準是1? 哪裡的標準啊? 11/12 15:14
Feis:C99 6.5.3.4 規定要是 1, 指標相減跟轉型差很多..... 11/12 15:21
Feis:pointer 轉 char 要看實作, 不一定會讓你過 11/12 15:22
Feis:不然你有算過指標相加嗎? 11/12 15:22
blackwindy:有阿 本篇的p+1不就是嗎 11/12 15:24
Feis:那個 1 不是指標吧...... 11/12 15:24
blackwindy:另外那是c99標準 不是所有程式都是c99 11/12 15:25
blackwindy:http://ppt.cc/d9E5 這個 11/12 15:26
Feis:你給的連結就在說 sizeof(char)是1 阿..只是1byte != 8bits 11/12 15:28
blackwindy:好吧看起來應該都是1沒錯拉 只是我記得不一定都是8bit 11/12 15:28
blackwindy:另外我剛打太快 p+1的1是sizeof(*p)才對 11/12 15:38
blackwindy:要算記憶體位置不是應該先轉嗎? 不然怎算? 11/12 15:41
yvb:其實 ANSI/ISO C (C89/C90) 也定義 sizeof(char) 是 1; 11/12 18:48
yvb:甚至 K&R C 2ed(1988)也同定義; 1ed(1978)則說現有實作都是1. 11/12 18:52
EdisonX: #1GKp_dPx 這篇看完應該就差不多了。 11/15 00:21
nikeasyanzi:感謝EdisonX大 我完全懂了XDXD 大感謝!^^" 11/19 00:49
nikeasyanzi:因為前幾位大大在討論的 其實我不大懂 囧 11/19 00:49