C++函数与数组

一、函数传递常规变量时,函数使用该变量的拷贝,但是传递数组时,函数将使用原来的数组。

二、数组的两个特殊性质

       (1)不允许拷贝和赋值

        不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。

       (2)使用数组是通常将其转化成指针

  在C++语言中,指针和数组有非常紧密的联系。使用数组的时候编译器一般会把它转换成指针。  

三、数组形参

  数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响。因为不能拷贝数组,所以我们无法以值传递的方式使用数组参数。因为数组会被转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

代码:

#include <iostream>
using namespace std;
//定义数组参数形参
void bb(int arr[],int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = i + 1 ;
    }
}
//定义指针参数形参
void bbs(int *arr, int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = i + 2;
    }
}
void show(int *arr,int n)
{
    for (int i = 0; i < 10; i++)
    {
        cout << *(arr+i)<< "  ";// 有数组:arrb[i]与(arrb+i)等价
    }

}
int main()
{

    int arrb[10];
    //定义数组参数,传递数组首地址,指向原数组
    bb(arrb,10 );
    show(arrb, 10);
    cout << endl;
    //定义指针参数,传递数组首地址,指向原数组
    bbs(arrb, 10);
    show(arrb, 10);
    system("pause");
    return 0;

}

运行结果

值得注意的是:将数组与指针对应,将数组地址作为参数可以节省复制整个数组所需要的时间和内存,在数组很大的情况下,对于拷贝的系统开销很大,另一方面也会降低原始数据被破坏的风险。

由于下面函数只能通过第二个参数来获知函数数组的大小,在一些功能中,我们可以对函数进行“说谎”。

代码:

#include <iostream>
using namespace std;
void bbss(int arr[], int n)
{
    int temp=1;
    for (int i = 0; i < n; i++)
    {
        temp += arr[i];
    }
    cout << "temp=" << temp<<endl;

}
int main()
{
    int arrs[6] = { 1, 2, 3, 4, 5, 6 };
    bbss(arrs,6);//累加数组的和
    bbss(arrs, 4);//累加数组前四个元素的和
    bbss(arrs+1, 3);//累加数组第二个元素后3个元素的和
    system("pause");
    return 0;

}

运行

填充数组:void bbb(double arr[],int limit) 在进行用户输入时,函数第二个参数也可以限制数组大小。

显示数组及const保护数组:void bbb(const double arr[],int limit)  意味着不能使用arr修改原始数组。

修改数组:void bbb(double r,const double arr[],int limit)  r为修改因子,其次数组和元素数目

猜你喜欢

转载自blog.csdn.net/qq_39016425/article/details/82866725