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的数组char
。 strstr
这里需要的是指向string
的第一个元素的指针,我们可以写成&string[0]
。但是,为方便起见,C 自动将 string
转换为指向其第一个元素的指针。所以想要的值传给了strstr
,而且是一个指针。
每当在表达式中使用数组并且不是 sizeof
的操作数、不是一元 &
的操作数并且不是用于初始化的字符串文字时,就会发生这种自动转换一个数组。
"test"
是一个字符串文字。它会导致创建一个 char
数组,该数组用字符串中的字符初始化,后跟一个终止空字符。源代码中的字符串文字表示该数组。因为它是一个在表达式中使用的数组,所以它也被转换为指向其第一个元素的指针。因此,再次将所需的指针传递给 strstr
.
您可以改写 &"test"[0]
,但这会使不习惯它的人感到困惑。
我对 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的数组char
。 strstr
这里需要的是指向string
的第一个元素的指针,我们可以写成&string[0]
。但是,为方便起见,C 自动将 string
转换为指向其第一个元素的指针。所以想要的值传给了strstr
,而且是一个指针。
每当在表达式中使用数组并且不是 sizeof
的操作数、不是一元 &
的操作数并且不是用于初始化的字符串文字时,就会发生这种自动转换一个数组。
"test"
是一个字符串文字。它会导致创建一个 char
数组,该数组用字符串中的字符初始化,后跟一个终止空字符。源代码中的字符串文字表示该数组。因为它是一个在表达式中使用的数组,所以它也被转换为指向其第一个元素的指针。因此,再次将所需的指针传递给 strstr
.
您可以改写 &"test"[0]
,但这会使不习惯它的人感到困惑。