3 c
#include <stdio.h>
int myfunc(char *str)
{
char *ptr =str;
while(*ptr++);
printf("%s %s\n",str,ptr);
return ptr-str-1;
}
int main()
{
printf("%d\n", myfunc("Princess Leia"));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Princess Leia %d
13
Run Code Online (Sandbox Code Playgroud)
ptr如何%d成为字符串?又为何ptr-str-1是13?
while(*ptr++);
Run Code Online (Sandbox Code Playgroud)
ptr当ptr指向传递的字符串的终止0 时仍然增量,所以在此之后它指向0终止符后面.
使用"Princess Leia"as参数,ptr增加14次,因此返回值为14 - 1 = 13.
打印的是 - 除了未定义的行为,因为解除引用ptr通常是指向0终结符(它在这里)之后的未定义行为,实际上是传入的字符串,以及它的0终止符之后的字节.这里"%d\n",自格式字符串"%d\n" happened to be stored just after"Princess Leia".