#include <stdio.h>
void lower_string(char*);
int main()
{
char string[100];
printf("Enter a string to convert it into lower case\n");
gets(string);
lower_string(string);
printf("Entered string in lower case is \"%s\"\n", string);
return 0;
}
void lower_string(char *string)
{
while(*string)
{
if ( *string >= 'A' && *string <= 'Z' )
{
*string = *string + 32;
}
string++;
}
} 在这个程序中,如果我用*string替换string[]会怎么样?有人能帮助我不使用任何函数来编写上面的程序吗?请解释一下(*str)这是什么意思?
发布于 2014-07-16 17:11:37
void lower_string(char *string);和
void lower_string(char string[]);char []类型的参数调整为char *类型。
当然,当string是*运算符的操作数时,如in:
while (*string)然后您不能将它更改为string[],因为这里的*是间接操作符,而不是类型名称的一部分。
发布于 2014-07-16 17:16:06
常见问题:问题-6.4
由于数组会立即衰减为指针,因此数组永远不会实际传递给函数。您可以假装一个函数接收数组作为参数,并通过将相应的参数声明为数组来说明它: 空f(char a[]) {.} 字面上解释说,这个声明没有用,所以编译器转过身来假装编写了指针声明,因为函数实际上会收到这样的结果: void (char *a) {.} 谈论一个函数没有什么特别的问题,就好像它接收了一个‘’数组,如果这个函数传统上被用来对数组进行操作,或者这个参数在函数中自然地被当作一个数组来处理。 这种将类似数组的声明器转换为指针的方法只适用于函数形式参数声明,而不是其他任何地方。
发布于 2014-07-16 17:14:58
符号[]在某种程度上基本上等同于*。您可以接受char[],仍然可以将它作为*指针对待,也可以接受char*作为参数,使用[]作为常规数组访问它--完全相同。您总是得到一个指向内存中那个点的指针,但是当它是一个用[]定义的数组时,指针将是常量(不能尊重它,只能访问它所指向的位置)。当使用char str[100];声明数组时,实际上是声明一个名为str的const char*,并指向堆栈中的一个内存区域。
https://stackoverflow.com/questions/24786754
复制相似问题