指针图解:
a[i]与*(a+i)二者是等价的,当对指针进行一个加整数i操作时,其实得到了一个地址。
注意函数调用栈与堆的区别,见程序的内存布局此篇文章
调用函数实现值的交换,区别如下:指针的地址指向作用一目了然。
数组名,实际上就是数组的首地址,表示数组在内存中的起始位置。
指向指针的指针,通常用来访问指针数组
传递 函数参数和返回值的三种方法:
- 传值
- 传指针
- 传引用
code举例:
1 int FuncByValue(int x) 2 { 3 x = x + 1; 4 return x; 5 } 6 7 void FuncByPointer(int* p) 8 { 9 *p = *p + 1; 10 } 11 12 13 void FuncByReference(int& r) 此处引用r和变量n就是同一个数据 14 { 15 r = r + 1; 16 } 17 18 int main() 19 { 20 21 22 int n = 0; 23 cout << "n的初始值,n=" << n << endl; 24 25 //调用传值 26 FuncByValue(n); 27 cout << "传值,n= " << n << endl; 28 29 //调用传指针 30 FuncByPointer(&n); 31 cout << "传指针n=" << n << endl; 32 33 //调用传引用 34 FuncByReference(n); 35 cout << "传引用,n= " << n << endl;
n的初始值,n=0
传值,n= 0
传指针n=1
传引用,n= 2
在可以的情况下,应尽量使用传引用来传递函数参数,效率高,形式自然,结合了二者的优点。