求大神帮忙求解指针数组
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楼。
[解决办法]
数组名是个常量
[解决办法]
楼上正解,数组名是常量,不能进行++操作。只有变量才可以!