int main()
{
char word[100];
char* lowerCase;
scanf("%s", word);
lowerCase = toLowerCase(&word);
printf("%s", lowerCase);
}
char * toLowerCase(char *str)
{
int i;
for(i = 0; str[i] != '\0'; ++i)
{
if((str[i] >= 'A') && (str[i] <= 'Z'))
{
str[i] = str[i] + 32;
}
}
return str;
}
在执行以上代码时,我收到了一个警告。 警告信息如下:
try.c: In function 'main':
try.c:16:26: warning: passing argument 1 of 'toLowerCase' from incompatible pointer type [-Wincompatible-pointer-types]
lowerCase = toLowerCase(&word);
^~~~~
try.c:4:7: note: expected 'char *' but argument is of type 'char (*)[100]'
char* toLowerCase(char *str);
我无法理解为什么会出现这个警告?当我把(word)传递给函数时,没有警告,但是当我执行以下代码时输出结果相同:
printf("%d", word);
printf("%d", &word);
如果地址相同,那么为什么会有这个警告?
char
是单个字符,char[100]
是由100个字符组成的块。它们是不同的类型,因此每个类型的指针也是不同的。您设计的函数期望一个指向单个字符的指针。 - M.MtoLowerCase(word)
。 - Sulthanword
已经表示一个指针,即char *
。您可以在不使用引用运算符&
的情况下传递它。对于char *p = "some text";
,p
指向字符串的起始地址,而&p
表示指针变量(一个char **
)的地址,而不是它所指向的地址。 - ssd