指针指向什么?

时间:2014-11-25 16:45:19

标签: c pointers kernighan-and-ritchie

我是C的新手,过去两个月我在业余时间阅读过Kernighan和Ritchie,并尝试在我的Linux VM上练习它。我在关于指针的章节中,需要澄清一下。在本章中,给出了一个函数,使用指针将内容从一个数组复制到另一个数组。

void strcpy(char *s, char *t) {

while ((*s++=*t++)!='\0') ;


}

我怀疑是

1)当我在指针s上执行此操作时,最后是否指向'\ 0'?

2)如果我想引用数组的倒数第二个元素,我是否使用*(s-2)?

3)如何使用指针打印出存储在数组中的所有字符?

2 个答案:

答案 0 :(得分:3)

  

当我在指针s上执行此操作时,最后是否指向'\0'

不,它没有。由于后递增,在循环结束时schar点过'\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 );