C/C++的指针与数组

来源:互联网 发布:数据库 oltp olap 编辑:程序博客网 时间:2024/06/05 05:20

今天被指针与数组的区别搞晕了。初学者的羁绊。

网上查找了一下,下面总结下

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



原创粉丝点击