求大神帮忙求解指针数组
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是没问题的。
char *ch[3]={a[0],a[1],a[2]};
char *ch[3];
ch[0]=a[0];
ch[1] = a[1];
ch[2] = a[2];
++ch同样是错误的
char *ch[3];
ch=a;