C++重难点知识总结

一、C++ 指针运算符(& 和 *)

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。

取地址运算符 &

& 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。

您可以把 & 运算符读作"取地址运算符",这意味着,&var 读作"var 的地址"。

间接寻址运算符 *

第二个运算符是间接寻址运算符 *,它是 & 运算符的补充。* 是一元运算符,返回操作数所指定地址的变量的值

请看下面的实例,理解这两种运算符的用法。

#include <iostream>
using namespace std;
 
int main ()
{
   int  var;
   int  *ptr;
   int  val;

   var = 3000;

   // 获取 var 的地址
   ptr = &var;

   // 获取 ptr 的值
   val = *ptr;
   cout << "Value of var :" << var << endl;
   cout << "Value of ptr :" << ptr << endl;
   cout << "Value of val :" << val << endl;

   return 0;
}

产生的结果为:

Value of var :3000
Value of ptr :0xbff64494
Value of val :3000

二、C++ 指向指针的指针(多级间接寻址)

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

#include <iostream>
using namespace std;
 
int main ()
{
    //实例
    int  var;
    int  *ptr;
    int  **pptr;

    var = 3000;
 
    // 获取 var 的地址
    ptr = &var;
 
    // 使用运算符 & 获取 ptr 的地址
    pptr = &ptr;

    // 使用 pptr 获取值
    cout << "var 值为 :" << var << endl;
    cout << "*ptr 值为:" << *ptr << endl;
    cout << "**pptr 值为:" << **pptr << endl;
}

运行实例可以得到的结果为:

var 值为 :3000
*ptr 值为:3000
**pptr 值为:3000

三、用指针将函数作为参数传参

有时候再对程序进行更进一步模块化时,可能有将函数作为参数的情况。即把逻辑框架抽象出来,而把判断的标准(或其他操作)变成一个函数指针,也就是用一个单独的函数来实现某个功能。如下面代码所示:

#include <iostream>
using namespace std;
 
int addition(int x, int y){
    return x + y;
}
 
int subtraction(int x, int y){
    return x - y;
}
 
int operation(int x, int y, int (*function)(int, int)){
    return (*function)(x, y);
}
 
int main(){
    int answer = operation(1, 2, addition);
    cout << answer;
}

在这里我们可以将(*function)视为函数的指针,直接将函数名称传进去。

C++部分借鉴http://www.runoob.com/cplusplus/cpp-pointers.html

指针将函数作为参数参考:https://blog.csdn.net/sinolzeng/article/details/72954023

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值