如何解决c 函数定义调用指针,但示例不使用指针
我对 C 等低级编程比较陌生。我正在查看 strstr() 函数 here。在查看函数定义 char *strstr(const char *str1,const char *str2);
时,我知道该函数将返回一个指针或一个 NULL,具体取决于是否在 str1 中找到了 str2。
但我不明白的是,如果函数要求两个输入为指针,那么示例何时不使用指针?
#include <string.h>
int main ()
{
char string[55] ="This is a test string for testing";
char *p;
p = strstr (string,"test");
if(p)
{
printf("string found\n" );
printf ("First occurrence of string \"test\" in \"%s\" is"\
" \"%s\"",string,p);
}
else printf("string not found\n" );
return 0;
}
解决方法
在 strstr(string,"test");
中,string
是一个包含 55 个 char
的数组。 strstr
这里需要的是一个指向 string
的第一个元素的指针,我们可以写成 &string[0]
。但是,为方便起见,C 会自动将 string
转换为指向其第一个元素的指针。所以想要的值传递给strstr
,它是一个指针。
只要在表达式中使用数组并且不是 sizeof
的操作数、不是一元 &
的操作数、也不是用于初始化数组的字符串文字,就会发生这种自动转换.
"test"
是一个字符串文字。它导致创建一个 char
数组,用字符串中的字符初始化,后跟一个终止空字符。源代码中的字符串文字表示该数组。由于它是表达式中使用的数组,因此它也被转换为指向其第一个元素的指针。因此,再次将所需的指针传递给 strstr
。
您可以改为写 &"test"[0]
,但这会使不习惯的人感到困惑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。