C/C++的指针与数组

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

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值