C语言边写函数的时候要定义一个数组char*a和char a[]一样么?

如题所述

当然不一样。char*a是一个指向字符对象的指针,该对象可以是一个字符,也可以是字符串(即字符数组);而char a[]则是定义了一个元素个数不定的字符数组;具体来说,初始化时都可以说:
char*a="asdasd";
char a[]=asdasd";
但是定义之后,*a可以将字符串整体赋给他,而char[]则不行,如*a="asdasww";是对的,
但a[]="asdasww";绝对是不允许的!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-03
如果是作为函数的形参,那么两种方法都可以用,效果是一样的,如果只是声明数组的话要用char a[] 并且这种声明方式一般必须要初始化以确定数组大小,如char a[] = "hello";之后如果需要可以修改数组空间中的值,如a[3]='w';
char *a;只是声明了一个字符型的指针,并没有对应的空间,如果用它指向常量是可以的如:a="hello";但是如果对a指向的空间赋值就会出错。
第2个回答  2013-03-31
char*a定义a是个指向字符型的指针变量,char a[]定义了一个字符数组
楼主问的那个问题,在函数后的括号内的,char*s和char s[],就运行程序而言,是等价的
他们作为函数的形参,两个中的s实质上都等同于一个指向字符型的指针变量,其实都是完成了一个指针的传递。在形参中都只分配一个存放指针的空间,而不是说因为是char s[]就分配一个字符数组的空间。
第3个回答  2013-03-31
不一样;char *a;是定义一个字符型指针,它可以这样用:char c; a=&c;char a[];是定义一个字符数组,里面最好加上长度,如char a[4];即里面可以放4个字符......
第4个回答  2013-03-31
一个是指针,一个是数组追问

我当然知道他一个是指针一个是数组就像这道题
函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指定的数组中。void fun(char *s,char t[])
{ int i,j=0;

for(i=0;i<strlen(s);i++)if(s[i]%2==0)t[j++]=s[i];
t[j]=0;
}
把*s换成s[]是不是程序进行是一样的啊?

追答

你写个程序试试,看看结果,
只有自己亲自做过,才记得清楚。

相似回答