您的位置:首页 > 其它

指针数组数组传参、指针引用传参

2016-09-17 23:47 302 查看
指针和数组作为参数传入函数时,传入的是地址,即指向变量的地址和数组的首地址,可以在函数中改变指针或数组的值,但本质上它们还是值的传递(区别于变量的值传递的是:变量值传递不会改变实参原来的值。),我们无法对指针和数组的地址进行操作(如:地址赋值,分配内存等),要进行地址操作需要使用指针引用或指针的指针。

示例:

<span style="font-size:18px;">int main()
{
int i = 1;
int *p = &i;
int sz[] = {1};
testFun(p, sz); //10, 20
testFun1(p); //10
testFun2(p); //50

int * p1 = NULL;
testFun3(p1);
*p1 = 10; //10
delete p1;
return 0;
}</span>

<span style="font-size:18px;">//值传递
void testFun(int *p, int sz[])
{
*p = 10;
sz[0] = 20;
}

//值传递
int g_int = 50;
void testFun1(int *p)
{
p = &g_int;
}

//指针引用
void testFun2(int *&p)
{
p = &g_int;
}

//指针引用分配内存
void testFun3(int *&p)
{
p = new int;
}</span>


运行testFun()后,指针值变为10,数组变为20
运行testFun1()后,指针值为10,不变

运行testFun2()后,使用指针引用,指针值变为50

运行testFun3()后,使用指针引用,内存分配成功,指针可进行赋值

指针引用 == 指针的指针
指针的引用保存的地址实际是指针本身的地址(即类似于int型的4字节空间),对它进行地址赋值或内存分配,实际是使该指针重新指向一个新的内存块的首地址(即保存新的指针变量地址,当然类型要是一样的)。

使用const &传参
属于值传递,虽然使用引用,传入的是地址,但是传入的值无法改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: