今天被指针与数组的区别搞晕了。初学者的羁绊。
网上查找了一下,下面总结下
char *p="abcd";//
上面这种定义法,实质上为const char *p="abcd";
就是“abcd”的空间在编译期,已经分配了空间,所以其值是不允许改变的,改变时,编译不报错,但运行时报错。但指针p还是可以指向其他地方。
char arr[]="abcd";
这种定义法,可以认为是char const arr="abcd",“abcd”的空间是运行时才分配的,所以“abcd”的值是可以改变的。而arr是可读而不可写的。
作为函数参数传递时,
数组在作为函数参数时,数组名将蜕化为指针。C语言的书上是这么说的,我这里要说得是:这句话是不完全正确的!我们知道指针是占用内存的,但是这个蜕化而成的家伙是不占有内存的,仍然只是个标签。书上为什么这么说呢?书上的意思是说这家伙已经蜕化得不知道自己有几个元素了。
同样,也要遵从上面的定义规则。
补充一下:
*c++ :先*c 再c++
(*c)++ :先(*c) 再(*c)自增
*++c :先++c 再*(c)
char (*p)[5] 数组指针
char *p[5] 指针数组
参考:http://www.cppblog.com/geforcex/articles/1861.html
http://blog.sina.com.cn/s/blog_5e8a99570100ceqv.html