刚学习Jon Bentley 编程珍珠的C风格,想知道是否有人可以向我解释以下两段C语法:
for
没有init条件的A (参见上面文件中wordncmp中的第2行):
for ( ; *p == *q; p++, q++)
Run Code Online (Sandbox Code Playgroud)
和.之间的语义差异
char *word[800000];
Run Code Online (Sandbox Code Playgroud)
和
char word[800000];
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,我认为数组只是指针word[0]
.
答案选择说明:好的,作为社区的其他成员,我在接受dmckee或CAbbott答案之间徘徊.他们都有重要的知识,我很欣赏.我已经接受了CAbbott的回答,因为它更简单,但给了dmckee一个upvote.尽可能公平,不接受两个答案.谢谢.
首先,p
和q
已经建立(q
指向现有的字符串,而p
到计划复制字符串的缓冲区).
在第二种情况下,你有一个字符数组和一个字符指针数组之间的区别.
字符数组将占用80000*sizeof(char)
字节数(通常为80000).指针数组将占用80000*sizeof(char*)
32位系统上通常为320000字节或64位系统上为640000字节.
这两个数组都没有初始化.
指针数组可能意图指向一串字符串.
最后:数组和指针不是一回事.我再说一遍:不一样.只要编译器需要它们就可以自由地将数组转换为指针.所以你可以在数组上使用指针算法.
已经有一段时间了,但这应该是差异:
for ( ; *p == *q; p++, q++)
Run Code Online (Sandbox Code Playgroud)
这只是开发人员不希望在for循环之前进行任何初始化.在这种情况下,开发人员只想迭代指针.
char *word[800000];
and
char word[800000];
Run Code Online (Sandbox Code Playgroud)
第一个声明一个800000字符*的数组,第二个是800000字符数组
希望有所帮助