指针数组数组传参、指针引用传参
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>
运行testFun()后,指针值变为10,数组变为20
运行testFun1()后,指针值为10,不变
运行testFun2()后,使用指针引用,指针值变为50
运行testFun3()后,使用指针引用,内存分配成功,指针可进行赋值
指针引用 == 指针的指针
指针的引用保存的地址实际是指针本身的地址(即类似于int型的4字节空间),对它进行地址赋值或内存分配,实际是使该指针重新指向一个新的内存块的首地址(即保存新的指针变量地址,当然类型要是一样的)。
使用const &传参
属于值传递,虽然使用引用,传入的是地址,但是传入的值无法改变。
示例:
<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 &传参
属于值传递,虽然使用引用,传入的是地址,但是传入的值无法改变。
相关文章推荐
- “定义为指针,外部以数组形式引用”和“定义为数组,外部以指针形式引用”会发生什么?
- 通过指针引用数组元素-将数组a中n个整数按相反顺序存放
- 【转】数组、指针、引用
- [C/C++] 通过指针引用数组
- 第七章、函数形参(指针与引用以及传递给函数的数组、vector的操作)
- [Happy Coding] 函数返回数组指针和数组引用
- 对象数组,对象指针,常对象、对象的常引用
- 数组指针和数组引用做参数的区别(是否能够限定数组大小、数组降价)
- C/C++对数组的引用——指向指针的指针和指针引用
- 引用、指针与数组名
- C++编程实例-数组、指针及引用
- more effective c++ 第一章读书笔记: 指针,引用,c++类型转换,多态数组,默认构造函数
- C++指针与引用以及数组
- 数组-指针-引用
- 数组的指针和引用的写法
- 指针、引用、数组和字符串,你真的全弄清楚了吗?
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- 指向数组的引用;指向数组的指针;指向类成员的指针;指向类数组成员的指针;二维字符串数组指针
- 引用传参和指针传参的差别.
- 指针、引用、数组和字符串,你真的全弄清楚了吗?