6.24习题有感-关于C++传数组和返回数组的问题

先看一下我写的答案

6.24
const int ia[10],传递的是一个指针,并不是数组(或者说数组的本质就是指针),我们应该使用reference来告诉它,我们传递的是 ”数组”
改正:

#include<iostream>
void print(const int (&ia)[10])
{
    for (size_t i = 0; i != 10; ++i)
        std::cout << ia[i] << std::endl;
}
int main() {
      int ia[10]={0,1,2,3,4,5,6,7,8,9};
print(ia);
}

但是我发现如果我用的下面这样的也行:

#include<iostream>
void print(const int ia[10])       //const int (&ia)[10]
/*但是可能会出现问题,因为这个本质上是声明传入一个指针(const int*),也就是说你传入一个不指向数组的指针,也会被编译器检查通过,而你原本想传入的是一个"数组 "   so array types cannot be function parameter or return types.*/
{
    for (size_t i = 0; i != 10; ++i)
        std::cout << ia[i] << std::endl;
}
int main() {
      int ia[10]={0,1,2,3,4,5,6,7,8,9};
print(ia);
}

这个故事告诉我们,当一个数组作为函数参数或者返回值的时候,他其实是一个指针,我们应该尽量避免出现这种情况,实在要用,可以尝试使用引用,当然你也可能返回函数局部变量的引用的错误,请你使用的时候多加注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值