str[3] 用指针法如何表示?
答:*(str + 3) 恕我直言:写成 str + 3 或 *str + 3 的童鞋请面壁去……
假设整型指针变量 p 存放的地址值是 0x11008888,那么请问 p + 1,p + 2,p + 4 和 p + 8 的地址分别是?
p + 1 == 0x11008888 + 4 == 0x1100888C
p + 2 == 0x11008888 + 8 == 0x11008890
p + 4 == 0x11008888 + 16 == 0x11008898
p + 8 == 0x11008888 + 32 == 0x110088A8
请问 str[20] 是否可以写成 20[str]?答:可以。因为在访问数组的元素的时候,数组名被解释为数组第一个元素的地址。所以 str[20] == *(str + 20) == *(20 + str) == [20]str
不信你自己试试看?
你能猜出下边关键代码段是用于干啥的吗?
……
while (n-- && (*target2++ = *target1++) != '\0')
;
…………
答:实现 strncpy 函数的功能(具体实现代码见下方动动手)。这道题比较考“经验”了,初学者很难想象出来的(So,想不出来不要泄气,以后看到就晓得了~)。
接上一题,请问代码写成下方形式,能否正确实现要求?
……
while ((*target2++ = *target1++) != '\0' && n--)
;
……
答:不能。因为这么做会超出要求 1 个字符(比如要求拷贝 5 个字符,实际拷贝了 6 个),因为代码的逻辑是 *target2++ = *target1++ 先赋值,再判断 n--。