首页新闻找找看学习计划

返回指针的函数中的一个问题

0
悬赏园豆:10 [已解决问题] 解决于 2015-08-20 22:37
 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转换成了一个变量?

JohnHow的主页 JohnHow | 初学一级 | 园豆:193
提问于:2015-08-18 21:54
< >
分享
最佳答案
0

这里有个类型转换的问题,upper中操作的是char* 指针;str[]这样的类型是数组,当然不支持++操作

char *dest = upper(str);之所以可以用,是由于str[]可以转换为char*

收获园豆:10
2012 | 专家六级 |园豆:18932 | 2015-08-19 11:50

谢谢,这么一讲我就明白多了。

JohnHow | 园豆:193 (初学一级) | 2015-08-20 22:37
其他回答(1)
0

函数内部的str是字符数组的首地址啊,

char *dest = upper(str);相当于

char *dest = upper(&str[0]);

葡萄不吐皮 | 园豆:214 (菜鸟二级) | 2015-08-19 14:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册