[问题] 几个小问题请教

楼主: 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