[問題] 幾個小問題請教

作者: baldhawk (哈哈)   2015-04-24 03:23:58
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
C
問題(Question):
1)字元陣列 跟 字串 有差個 \0
請問多了這個 \0 會有怎麼樣的差別?
查了很多書 都只看到有差別 卻沒看到會怎樣
2) int a[5] = {1,2,3,4,5};
int *p = (int*)(&a+1);
a) &a+1 我的理解是 取址後跳下一個址 i.e. 得到 &a[1]是嗎?
b) (int*) 是用來 casting 嗎? 可是又多個* ?
3) char *pc = "hello"
*pc++ 查過書是說 先 *pc 再 pc++
可是我看書上 後置遞增算子 比 取址 優先權大
那不就應該 先 pc++ 再 *pc?
弄了好久還是沒解出來
只好向前輩請益了 謝謝!
作者: carylorrk (carylorrk)   2015-04-24 07:00:00
1.所有C字串處理相關funciton都是遇到 '\0' 停止,例如printf 的 %s、string.h 裡的都是只處理到 '\0'2.a 對, 2.b casting 成指向 int 的指標3. 後置運算產生的值是原本的值,不是改變後的值printf("%d %d", x, x++); 的值會是一樣的^印出來
作者: Feis (永遠睡不著 @@)   2015-04-24 07:52:00
2.a 錯
作者: carylorrk (carylorrk)   2015-04-24 07:59:00
sorry,沒主意看到 &a+1 的 &,的確是錯的&x 的形態是 int (*)[2],+ 1 是下一個 array你要問的應該是 a + 1,此時 a decay 成 int*
作者: bald (好好)   2015-04-24 09:11:00
先謝謝樓上兩位大大指點 尤其C大的詳細說明 我會仔細慢慢看一早起來看到C大仔細解說 實在是很感謝阿!!
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-04-24 10:09:00
你沒真的用過字串對不對。
作者: baldhawk (哈哈)   2015-04-24 10:55:00
所謂沒有用過是指?我最多就是練習程式會用到但是沒有真的在某種情境下 去使用字串阿 我懂樓上意思了 你是說我沒用過lib 的 string fun.哈哈 確實沒用過 因為我是初學自修者 還在看基本的功能
作者: carylorrk (carylorrk)   2015-04-24 11:45:00
等等,我早上在幹嘛,printf 那個例子是 undefinedbehavior! 頭昏了我XD 總之例是錯的,你知道意思就好
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-04-24 12:22:00
電腦語言凡是用看的都不叫學。
作者: TobyH4cker (Toby (我要當好人))   2015-04-24 14:02:00
樓上大大多次宣導此觀念耶!
作者: baldhawk (哈哈)   2015-04-24 16:09:00
謝謝 真的 動手才學的紮實 我已經灌好dev囉謝謝C大 我會再仔細思考你的說明:)
作者: TobyH4cker (Toby (我要當好人))   2015-04-24 21:59:00
哦...不要用Dev
作者: baldhawk (哈哈)   2015-04-25 00:01:00
toby大怎說呢?
作者: KoenigseggG (地表最速)   2015-04-25 00:17:00
本板搜 dev-c++ 視窗
作者: dirkc (3781615)   2015-04-25 06:55:00
舊版的dev-c++對於學反組譯其實是很好的入門,新的編譯器都會加入許多的保護機制,如security cookie或safeseh等,讓組語較為複雜,不適合入門;不過學c/c++語法則不建議再用舊版dev,因為很多地方不符合近幾年的語法標準了
作者: NMOSFET (NMOSFET)   2015-04-25 07:22:00
https://www.visualstudio.com/ <-免費的visual studio
作者: baldhawk (哈哈)   2015-04-25 14:26:00
謝謝大大門的解說喔 獲益良多:)

Links booklink

Contact Us: admin [ a t ] ucptt.com