1 // 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 3 char * upper(char *str) { 4 // 先保留最初的地址。因为等会str指向的位置会变来变去的。 5 char *dest = str; 6 7 // 如果还不是空字符 8 while (*str != '\0') { 9 // 如果是小写字母 10 if (*str >= 'a' && *str <= 'z') { 11 // 变为大写字母。小写和大写字母的ASCII值有个固定的差值 12 *str -= 'a' - 'A'; 13 } 14 15 // 遍历下一个字符 16 str++; 17 } 18 19 // 返回字符串 20 return dest; 21 }
1 int main() 2 { 3 // 定义一个字符串变量 4 char str[] = "lmj"; 5 6 // 调用函数 7 char *dest = upper(str); 8 9 printf("%s", dest); 10 return 0; 11 }
我有一个不明白的地方,str[]中str是数组名,不可以str++,试试调用函数 char *dest = upper(str); 后在函数内部出现了 str++,为什么可以这样使用呢,调用之后的str和主函数中的str有什么不同?经过一段时间理解还是感觉模模糊糊的,是调用后str转换成了一个变量?
这里有个类型转换的问题,upper中操作的是char* 指针;str[]这样的类型是数组,当然不支持++操作
char *dest = upper(str);之所以可以用,是由于str[]可以转换为char*
谢谢,这么一讲我就明白多了。
函数内部的str是字符数组的首地址啊,
char *dest = upper(str);相当于
char *dest = upper(&str[0]);