【发布时间】:2025-11-21 17:50:01
【问题描述】:
通过查看此代码示例:
/* strrchr example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "This is a sample string";
char * pch;
pch=strrchr(str,'s');
printf ("Last occurence of 's' found at %d \n",pch-str+1);
printf("pch number: %d \n str number: %d", pch, str);
return 0;
}
输出如下:
Last occurence of 's' found at 18
pch number: -8575
str number: -8592
我不明白,pch 和 str 有什么数字,printf() 中的 %d 下似乎有什么转换。这是否类似于内存单元的编号,指向第一个字符的指针所在的位置(在str 的情况下)?如果是这样,为什么str 比pch 大?它应该代表指向第一个字符串字符的指针,不是吗?最后,为什么我们在pch-str+1 中需要+1?
补充:这不是我的代码(第二个printf() 除外)。我在cplusplus.com 上找到它,正在寻找strrchr() 参考。
【问题讨论】:
-
始终注意编译器警告。
pch和str是指针。使用%p格式化指针。并且str指针值不大于pch。它“更负”,因此值更小。 -
“最后,为什么我们在 pch-str+1 中需要 +1?” - 你不需要它。尝试使用和不使用它并观察差异。
-
如果有任何答案适合您,您可能想给他们投票。您还应该接受最能涵盖您的答案(按答案左侧的绿色勾号 - 您只能接受一个答案)。
-
“这是否类似于内存单元的编号,指向第一个字符的指针所在的位置(在 str 的情况下)?如果是这样,为什么 str 大于 pch?” --> 就像问为什么你的家庭地址比你朋友的家庭地址大,即使你住在同一条街上。