函数(一)——函数对数组、结构的调用

本文探讨了在C++中如何在函数中传递和操作数组,包括使用数组名、指针和数组区间。同时,介绍了函数与结构的交互,包括按值传递、通过指针和引用传递结构,并展示了其对结构内容的影响。示例代码详细解释了各种方法的实现和效果。
摘要由CSDN通过智能技术生成

1.函数与数组

函数使用数组名作为参数时,实际上传递的时数组第一个元素的地址,因为在访问数组中的元素时,数组名和指针之间起着等效的作用,因此可以通过以下3种方式在函数中传递数组。
(1)函数使用数组名作为作为形参
(2)函数使用指针指向的地址作为形参
(3)函数访问数组中某段区间的元素

注:函数无法返回数组,但可以返回指向数组的指针
示例代码

#include<iostream>

using namespace std;

const int Asize=10;
//函数使用数组名作为作为形参
void useArray(int arr0[],int n);
//函数使用指针指向的地址作为形参
void usepArray(int* parr1,int n);
//函数访问数组中某段区间的元素
void usepArraydur(const int* pbegin,const int* pend);


int main()
{
    //调用函数
    int arr[Asize]={1,2,3,4,5,6,7,8,9,0};
    int *ps = arr;

    //函数使用数组名作为作为形参
    useArray(arr,Asize);
    usepArray(arr,Asize);
    usepArraydur(arr+2,arr+5);
    cout<<"------------------"<<endl;
    //函数使用指针指向的地址作为形参
    usepArray(ps,Asize);
    useArray(ps,Asize);
    usepArraydur(ps+2,ps+5);
    
    return 0;
}


void useArray(int arr0[],int n)
{
    //cout<<"***Function useArray***"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<arr0[i]<<" ";
    }
    cout<<"\r\n";
    //cout<<"\r\n***Function useArray Done***\r\n"<<endl;
}

void usepArray(int* parr1,int n)
{
    //cout<<"***Function usepArray***"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<*(parr1+i)<<" ";
    }
    cout<<"\r\n";
    //cout<<"\r\n***Function usepArray Done***\r\n"<<endl;
}

void usepArraydur(const int* pbegin,const int* pend)
{
    //cout<<"***Function usepArraydur***"<<endl;
    const int* ps;
    for(ps=pbegin;ps!=pend;ps++)
    {
        cout<<*(ps)<<" ";
    }
    cout<<"\r\n";
    //cout<<"\r\n***Function usepArraydur Done***\r\n"<<endl;
}

输出

1 2 3 4 5 6 7 8 9 0 
1 2 3 4 5 6 7 8 9 0 
3 4 5 
------------------
1 2 3 4 5 6 7 8 9 0 
1 2 3 4 5 6 7 8 9 0 
3 4 5 

2.函数与结构

(1)可以像传递普通变量那样将按值传递结构,此时传递的是结构的一个副本,修改它不会改变调用它的函数中结构的内容;也可以直接返回结构。
(2)可以传递指向结构的地址,使用&运算符获得结构的地址,并使用指针访问结构的内容;若修改结构则会改变函数中的内容。
(3)可以使用引用传递结构,可以在函数中直接使用并改变结构的内容

示例代码

#include<iostream>

using namespace std;

struct Point{
    int x;
    int y;
};

void useStruct0(Point points);//像传递普通变量那样将按值传递结构
void useStruct1(Point* p_points);//传递指向结构的地址
void useStruct2(Point &points);//可以使用引用传递结构

int main()
{
    //声明和初始化三个结构
    Point points0,points1,points2;
    points0.x=10;
    points0.y=100;
    points1=points0;
    points2=points0;

    
    //像传递普通变量那样将按值传递结构
    useStruct0(points0);
    cout<<"product0=points0.x*points0.y\r\n=";
    cout<<points0.x<<"*"<<points0.y<<"="<<points0.x*points0.y<<endl<<endl;
    
    //传递指向结构的地址
    Point* p_point1=&points1;
    useStruct1(p_point1);
    cout<<"product1=points1.x*points1.y\r\n=";
    cout<<points1.x<<"*"<<points1.y<<"="<<points1.x*points1.y<<endl<<endl;
    
    //可以使用引用传递结构
    useStruct2(points2);
    cout<<"product2=points2.x*points2.y\r\n=";
    cout<<points2.x<<"*"<<points2.y<<"="<<points2.x*points2.y<<endl<<endl;
    
    return 0;
}

void useStruct0(Point points)
{
    points.x+=10;
    points.y+=100;
}
void useStruct1(Point* p_points)
{
    p_points->x+=10;
    p_points->y+=100;
}
void useStruct2(Point &points)
{
    points.x+=10;
    points.y+=100;
}

输出

product0=points0.x*points0.y
=10*100=1000

product1=points1.x*points1.y
=20*200=4000

product2=points2.x*points2.y
=20*200=4000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值