我是C的新手,过去两个月我在业余时间阅读过Kernighan和Ritchie,并尝试在我的Linux VM上练习它。我在关于指针的章节中,需要澄清一下。在本章中,给出了一个函数,使用指针将内容从一个数组复制到另一个数组。
void strcpy(char *s, char *t) {
while ((*s++=*t++)!='\0') ;
}
我怀疑是
1)当我在指针s上执行此操作时,最后是否指向'\ 0'?
2)如果我想引用数组的倒数第二个元素,我是否使用*(s-2)?
3)如何使用指针打印出存储在数组中的所有字符?
答案 0 :(得分:3)
当我在指针
s
上执行此操作时,最后是否指向'\0'
?
不,它没有。由于后递增,在循环结束时s
将char
点过'\0'
。
如果我想引用数组的倒数第二个元素,我可以使用
*(s-2)
吗?
这将是字符串的最后一个字符,假设您的C字符串不为空
如何使用指针打印出存储在数组中的所有字符?
除非在进入循环之前存储指针的初始值或计算复制的字符数,否则不能这样做。你不能向后走一个C字符串来找到它的开头,因为那里没有合适的“标记”。
答案 1 :(得分:0)
1) when I execute this on the pointer s, then in the end does it point to '\0'?
as mentioned elsewhere, s will point to one past the '\0' at the end of s string
2) if I want to refer to the second last element of the array do I use *(s-2) ?
no, rather use s[strlen(s)=2]
3) how do I print out all the characters stored in the array using the pointer?
save the s pointer to a local variable before entering the loop
char *pSavedS = s;
then append, after the end of the loop, the line:
printf( "%s", pSavedS );