【发布时间】:2020-06-26 16:02:35
【问题描述】:
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 个字符的块。这些是不同的类型,因此指向每个的指针是不同类型的指针。您将函数设计为期望指向单个字符的指针 -
你应该使用
toLowerCase(word)。 -
word已经表示一个指针;即char *。您可以在不使用引用运算符&的情况下传递它。对于char *p = "some text";,p指向字符串的起始地址,而&p表示指针变量的地址(一个char **),而不是它指向的地址。 -
@M.M char 是单个字符,char[100] 是 100 个字符的块。这些是不同的类型-> 同意,因此指向每个的指针是不同类型的指针?您将函数设计为期望指向单个字符的指针?
-
@WeatherVane 这对我的问题有何影响?我问的是完全不同的事情
标签: c arrays pointers c-strings memory-address