C函数的参数中有取地址符
⼀前⾔
之前在函数中看到函数的形参中存在取地址符&,⼀直不知道什么意思。然后⼜⼀次碰到了,就把它搞定。
void partition(int a[], int s, int t, int &k) //划分函数
{sizeof 指针
int i, j, x;
x = a[s]; //取划分元素
i = s; j = t; //扫描指针初值
do // 循环地进⾏划分
{
while ( (a[j]>=x) && (i<j) )
j--; //从右向左扫描
if (i < j)
a[i++] = a[j]; // ⼩元素向左移
while ( (a[i]<x) && (i<j) )
i++;
if (i < j)
a[j--] = a[i]; // ⼤元素向右移
} while (i < j); //直到指针i和j相等
a[i] = x; //划分元素就位
k = i;
}
⼆分析与结论
2.1 结论
当函数形参为int &k时,在函数中对k进⾏操作,⽐如说赋值,那么主函数中相应的主对象的值也会跟着改变。
相当于,指针变量,但是不需要加上间接访问符*,直接就是对k本⾝操作就OK,且与指针变量有区别,相当于⼀个静态的指针。害,就是引⽤嘛。
2.2 分析
#include <iostream>
using namespace std;
void testfunc(int &x)
{
cout << "value x is:" << x << endl;
cout << "sizeof x is: " << sizeof(x) << endl;
cout << "sizeof &x is: " << sizeof(&x) << endl;
x = 1;
cout << "sizeof &x =1 is: " << sizeof(&x) << endl;
}
int main()
{
int x = 100;
int * p = &x;
cout << "sizeof p is: " << sizeof(p) << endl;
cout << "sizeof *p is: " << sizeof(*p) << endl;
testfunc(x);
cout << "value x is: " << x << endl;
cout << "sizeof x is: " << sizeof(x) << endl;
cout << "sizeof &x is: " << sizeof(&x) << endl;
system("pause");
return 0;
}
运⾏结果为:
sizeof p is: 8
sizeof *p is: 4
value x is:100
sizeof x is: 4
sizeof &x is: 8
sizeof &x =1 is: 8
value x is: 1
sizeof x is: 4
sizeof &x is: 8
请按任意键继续. . .
1. 函数形参中int &x,取的是引⽤对象的地址,也要占⽤内存空间(和指针占⽤⼤⼩不同,x其实就是对象本⾝,&x才是指针所占内容空
间)。
2. 在C++的标准中,规定了引⽤初始化完毕之后,对引⽤的操作就等于对实际对象的操作
3. 引⽤的应⽤嘛。安全的指针。
参考⽂献
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论