欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++重难点知识总结

程序员文章站 2022-05-15 14:02:34
...

一、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

 

相关标签: c++ 常用指令