函数的基本知识

函数的指针参数

两种参数传递的方法:一种值传递,一种是地址传递,值传递形参改变不改变实参的值,形参所占的内存空间和实参不一样。

int swap(int nuum1,int num2)
{
    num1^=num2;
    num2*=num1;
    num1^=num2;
}
int main()
{
    int a=10;int b=20;
    swap(a,b);
}
a10

b             

20
int num110
int num220

所以值传递时并不会改变形参,但是指针传递时,传入的是地址,所以会改变实参

int swap(int *p1,int *p2)
{
    (*p1)^=(*p2);
    (*p2)*=(*p1);
    (*p1)^=(*p2);
}
int main()
{
    int a=10;int b=20;
    swap(&a,&b);
}
a10 0x0001

b             

20 0x0002
int *p10x0001
int *p20x0002

这里*p1相当于*0x0001,就是取a的地址,所以直接修改了实参的值

函数的数组参数

像这种,如果想要传递数组进去,不能 传递a[3]这种方式

int add(int a[3])
{
    std::cout<<sizeof(a[3]);
    return 0;
}
int main()
{
    int a[3] {1,2,3};
    add(a[3]);
}

因为不知道要数组的元素个数,可能是2个,也可能是3个所以推荐用下面这种方法。另外,如果传入a【3】,编译器不会知道这是数组还是指针类型,因为a【3】实际上一个指针,另外假如,假如不把数组当成指针,那么不同长度的数组就是不同的类型,a【2】和a【3】类型都不同,如果把a[3]作为形参,传入不同长度的数组都需要不同的函数

数组有一种声明方式是不写下标,由编译器判断数组的容量大小

int a[]  {1,2,3};

所以数组的参数传递可以这样写,count表示数组元素个数

add(int a[],unsigned count)

当然,也可以用指针方式来传递,因为数组本身就是指针

多维数组的参数传递

必须指定低维的数组元素个数

add(int a[][2],unsigned count);
int main()
{
    a[2][2] {{1,2},{2,3}};
    add(a,2);
}

因为多维数组是以低维为步径,如果低维也用变量,就无法确定步径。

函数的引用参数

引用做函数参数时必须初始化,所有有时候用指针还是用引用做参数可以从这方面考虑

指针的引用,形参指针引用可以修改实参指针的指向,即指针的引用可以修改指针,原理非常简单

引用参数类型必须一样

void swap(int& a)
{
	a = 200;
}
int main()
{
	float p{ 100 };
	swap(p);
	std::cout << p;
}

这个程序就是错误的,必须让p为int类型才可以,因为别名类型必须和原名类型相同

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值