为什么我们不在主函数中的strstr中传递指针参数

时间:2016-07-25 12:43:28

标签: strstr

char *strstr(char *string2, char string*1)

strstr函数中,参数是指针字符串,但是当我们从main传递参数时..为什么我们只使用字符串而不使用它们的地址?

#include <stdio.h>
#include <string.h>
main()
{
   char s1 [] = "My House is small";
   char s2 [] = "My Car is green";

   printf ("Returned String 1: %s\n", strstr (s1, "House"));
   printf ("Returned String 2: %s\n", strstr (s2, "Car"));
}

1 个答案:

答案 0 :(得分:0)

s1和s2是(或可以用作)指针。它们都指向字符串的第一个字符。

以下是c标准

的文字
6.3.2.1左值,数组和函数指示符
...
3除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式的类型为''数组 type < / em>''被转换为类型为''指向 type '的指针的表达式,它指向数组对象的初始元素,而不是左值。如果数组对象具有寄存器存储类,则行为未定义。

我应该提一下你可以用。

定义一个字符串
char* s1 = "My House is small";

但这与

不一样
char s1 [] = "My House is small";

因为char* s1将在包含字符串文字的只读内存中定义,而char s1 []将被定义为堆栈上的静态数组。