首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

又是c指针有关问题。

2012-04-11 
又是c指针问题。。。大家看看下面这段代码为什么报错: error C2664: “Fun”: 不能将参数 1 从“char (*__w64 )[

又是c指针问题。。。
大家看看下面这段代码为什么报错: 
 error C2664: “Fun”: 不能将参数 1 从“char (*__w64 )[5]”转换为“char **”

C/C++ code
#include <stdio.h>void Fun(char **str){    (*str)++;}int main(){    char str[5]="abcd";    Fun(&str);    printf("After change,the string is :  %s\n",str);    return 0;}


[解决办法]
Fun((char **)&str);
[解决办法]
探讨
为何要强制类型转换呢?

[解决办法]
数组的地址不是char **类型,所以要(char **)&一下
[解决办法]
指针是有类型的。你的str是数组的首地址,等价于&str[0];所以str是char型指针,但str同时是常量指针,不能进行str++这种操作。(数组名都不能进行这种操作),你取str的地址传给了形参,这个是没问题的。但在fun函数中的形参str是实参str的拷贝,所以函数体中的*str实际上就和main中的str是同一个量,即一个常量指针,你在fun中进行(*str)++肯定就不对了。
这就类似于: char* const a;a++;这种用法一样。是错误的。
你可以测试一下这种代码: int a[2];a++;肯定是错的。

热点排行