c函数定义调用指针但示例不使用指针

c function definition calls for pointer but example does not use pointers

我对 C 等低级编程比较陌生。我正在审查 strstr() 函数 here。在查看函数定义 char *strstr(const char *str1, const char *str2); 时,我了解到该函数将 return 一个指针或一个 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的数组charstrstr这里需要的是指向string的第一个元素的指针,我们可以写成&string[0]。但是,为方便起见,C 自动将 string 转换为指向其第一个元素的指针。所以想要的值传给了strstr,而且是一个指针。

每当在表达式中使用数组并且不是 sizeof 的操作数、不是一元 & 的操作数并且不是用于初始化的字符串文字时,就会发生这种自动转换一个数组。

"test" 是一个字符串文字。它会导致创建一个 char 数组,该数组用字符串中的字符初始化,后跟一个终止空字符。源代码中的字符串文字表示该数组。因为它是一个在表达式中使用的数组,所以它也被转换为指向其第一个元素的指针。因此,再次将所需的指针传递给 strstr.

您可以改写 &"test"[0],但这会使不习惯它的人感到困惑。