指针

 指针图解:

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

在可以的情况下,应尽量使用传引用来传递函数参数,效率高,形式自然,结合了二者的优点。

原文地址:https://www.cnblogs.com/skylover/p/7226657.html