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