Re: [問題] 字串減字串?
※ 引述《art1 (人,原來不是人)》之銘言:
: ※ 引述《loveflames (咕啾咕啾魔法陣)》之銘言:
: : char * state="zsxdcvg";
: : ...
: : playAudio(&audio[strchr(state,s1[i])-state]);
: strchr(state,s1[i])-state 的結果是個數字
: 可是實在無法理解為什麼字串可以這樣直接相減
: google 「字串相減」或是「字串 減 字串」 都找不到想要的說明
: 還是說這種技巧硬記就好?不需要去理解?
首先指標宣告
char *a;
char b[]="1234";
在記憶體中
0x100 0x101 0x102 0x103
1 2 3 4
a = b; 則 a = 0x100 , 這個變數的值為 0x100
當要存取記憶體上的資料時 *a = '1', *(a+1) = '2' ... etc
^
|-- 這是索引, 不是記憶體
假設 state 在 0x100 位址
char *state="zsxdcvg";
char *tmp;
tmp = strchr(state, 'd')
tmp 會等於 0x103
tmp - state = 0x103 - 0x100 = 3
通常是用來找到一個 buffer 中的 index
所以 state[tmp-state] = 'd'
如果應要變成字串, 通常 state[tmp-state] = 0
這樣 state 就變成 "zsx", 但前提之下 state 要宣告成 array 不能用指標
e.g. char state[] = "zsxdcvg";
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.164.120
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1464139144.A.0C3.html
討論串 (同標題文章)