深入理解C++数组与指针(持续更新)

1. 数组名

        在大多数情况下,C++和C语言一样,也将数组名视为指针。C++将数组名解释为其第一个元素的地址。注意该规则的例外情况:

(1)数组声明使用数组名来标记存储位置;

(2)对数组名使用sizeof将得到整个数组的长度(单位为字节);

(3)将地址运算符&用于数组名时,将返回整个数组的地址;

2. const和指针

(1)C++禁止将const的地址赋给非const指针。如果非要这样做,可以使用强制类型转换来突破这种限制。

(2)C++允许将非const的地址赋给const指针,但进入两级间接关系(用指针指向指针)时将const和非const混合的指针赋值方式则不再安全,因此仅当只有一层间接关系(如指针指向基本数据类型)时,才可以将非const地址或指针赋给const指针

注意:如果数据类型本身不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。

(3)假设有一个由const数据组成的数组:

const int months[12] = {31, 28, 31,30, 31,30, 31, 31, 30, 31, 30, 31};

则禁止将常量数组的地址赋给非常量指针意味着不能将数组名作为参数传递给使用非常量形参的函数:

int sum(int arr[], int n);

int j = sum(months, 12);   //编译器不允许这样的调用

(4)尽可能使用const:如果条件允许,应将指针形参声明为指向const的指针。既可以避免由于无意间修改数据而导致的编程错误;而且因为使用const使得函数能够处理const和非const实参,否则只能接受非const数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值