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

求大神帮忙求解指针数组,该怎么处理

2014-01-22 
求大神帮忙求解指针数组eg1:#include stdio.hint main(int argc,char *argv[]){int f(char *ch[])char

求大神帮忙求解指针数组
eg1:#include <stdio.h>
int main(int argc,char *argv[])
{
int f(char *ch[]);
char *a[3]={"we","are","you"};
f(a);
return 0; 
}
int f(char *ch[])
{
printf("%s",*(++ch));

return 0; 
}
我这样写,编译器不报错,但当我不通过函数调用写的时候,它就会报错。
eg2:#include <stdio.h>
int main(int argc,char *argv[])
{
int f(char *ch[]);
char *a[3]={"we","are","you"};
char *ch[3];
ch=a;
printf("%s",*(++ch));
return 0; 
}
为什么上面的eg1中的ch可以自增,而下面的eg2中的ch不可以自增,它会报错!它们之间有什么区别吗?各位帅哥美女们求助下哦
[解决办法]
数组名作为参数就相当于指针, 你有见过给数组名++的吗?数组访问还是使用下标
[解决办法]
同意楼上的说法 
数组名字 是代表的数组   值是第一个元素的地址  数组的名字是固定的 不可以进行++之类的操作 因为++之类的操作改变了值    用函数调用  char *argv[] 其实跟 char** argv 没有区别 ,  argv是一个二级指针  由于函数参数进行的是传值调用  就是 把数组的值 也就是第一个元素的地址 赋值给 argv的二级指针  argv当然是可以变化的 
[解决办法]
第二个初始化,应该是 

char **ch=a;

这样
++ch
 是没问题的。
或者,也可以这么初始化;
1)
char *ch[3]={a[0],a[1],a[2]};

2)
char *ch[3];
 ch[0]=a[0];
 ch[1] = a[1];
 ch[2] = a[2];


不过没有意义,而且
 ++ch
 同样是错误的

char *ch[3];
ch=a;

是错误的,C,C++数组不可整体赋值。
其他参见1楼,2楼。

[解决办法]
数组名是个常量
[解决办法]
楼上正解,数组名是常量,不能进行++操作。只有变量才可以!

热点排行