C++:函数指针、指针函数、常量指针、指针常量、常量指针常量、常量引用、引用常量

原谅一个菜鸡把这些概念整理到一起,目的是为了加深下印象,同时也和大家一起分享,写的有误的地方还请大家多多包涵和指正。大概从接触c语言指针开始一直到学习c++的过程中,这些概念我始终都很难以彻底搞明白,总是当初记得,然后过几天就忘记了。之后再次见到这些代码时就完全搞不清楚了。

1、函数指针

指向函数指针(没错,我就是这样记的)。函数指针本质上是一个指针,不过这个指针是指向函数的,既然指针可以指向变量,那么指向函数也不足为奇了。

Code

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<cstring>

using namespace std;

int n, m, T;

int Max(int x, int y){
   if(x < y) return y;
   return x;
}

int main(){
   int i, j, k;
   int (*p)(int, int); //函数指针的声明
   p = Max;            //指定该函数指针指向哪个函数
   cin >> n >> m;
   cout << p(n, m) << endl;
   return 0;
}

Result

23 45
45

2、指针函数

返回指针函数(没错,就是这么巧)。指针函数本质上是一个函数,不过这个函数返回的是一个指针,函数可以无返回值,也可以返回一个int型的数据,那么为什么不可以返回一个指针呢!这样就很好理解了。

Code

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<cstring>

using namespace std;

int n, m, T;

int result;

int *Max(int x, int y){
	if(x < y) result = y;
	else result = x;
	return &result;
}

int main(){
	int i, j, k;
	cin >> n >> m;
	int *p = Max(n, m); //既然返回指针,那必定需要用一个指针去接收这个结果
	cout << *p << endl; //输出这个结果
	return 0;
}

3、常量指针

指向常量指针。常量指针表示的是指向的对象是一个常量,即不允许通过指针修改它的值,但是指针本身不是一个常量,它可以指向其它的变量。

Code

int main(){
	int i = 1, j = 2, k = 3;
	const int* p = &i;
	*p = 10; //不允许,因为指针指向的对象为一个常量
	p = &j;  //允许,此时指针指向了变量j
	return 0;
}

4、指针常量

指针本身是一个常量。和常量指针相反,指针常量表示的是指针本身是一个常量,即指针的地址不能修改,在声明指针时对其进行了初始化之后,因为指针本身是一个常量,那么以后就不能将此指针指向其它的变量。

Code

int main(){
	int i = 1, j = 2, k = 3;
	int* const p = &i;
	*p = 10; //允许,修改了指针指向对象的值
	p = &j;  //不允许,指针本身是一个常量,不再允许指向其它的变量
	return 0;
}

5、常量指针常量

指向常量指针常量。常量指针常量指的是指针本身和它指向的对象都是常量(这么多常量组成的概念,就一股脑的认为所有的都是常量吧)。

Code

int main(){
	int i = 1, j = 2, k = 3;
	const int* const p = &i;
	*p = 10; //不允许
	p = &j;  //不允许
	return 0;
}

6、常量引用

指向常量引用。指针常量在定义上和常量指针十分相似,即引用指向的对象是一个常量,不允许通过引用修改它的值。

Code

int main(){
	int i = 1, j = 2, k = 3;
	const int &q = i;
	q = 10; //不允许,因为引用指向的对象是一个常量
	return 0;
}

7、引用常量

实际上是不存在这一说法的,因为引用本身就是一个常量,引用代表的是变量的一个别名,在初始化时为其指定了一个指向的对象,以后是不能让其指向其它变量的,这里不同于指针。

int main(){
	int i = 1, j = 2, k = 3;
	int &q = i;
	&q = k; //不允许,引用只能指向初始化时指定的对象,不能指向其它的变量
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值