(C++)指针数组、数组指针、函数指针与指针函数区别

C++初学者很容易被这几个概念弄混,简而言之:

指针数组:是一个数组,数组内元素为指针

数组指针:是一个指针,指向一个数组

指针函数:是一个函数,函数返回值为一个指针

函数指针:是一个指针,指向一个函数

下面我们再看看具体定义与内容:

1、指针数组

int arr_value[3];
int *arr_p;
int *arr[3];

        我们知道第一行第二行代码分别是定义数组与指针,那第三行是是定义啥?这就涉及到C++中运算符优先级的问题了,arr先与[]结合那它就是数组,arr先与*结合那它就是指针。在这里[]的优先级要高于*,因此首先定义变量名arr其为大小为3的一个数组,再定义数组里元素int*。

下面是指针数组的定义与赋值:

	int *arr[3];
	int value[3] = { 1,2,3 };
	for (int i = 0; i < 3; i++)
	{
		arr[i] = &value[i];  //将数组value每个元素的地址赋值给arr[i]
	}
	for (int i = 0; i < 3; i++)
	{
		cout<<arr[i]<<"\t"<<*arr[i]<<endl;
	}

2、数组指针

	int (*arr_p)[3];

        前面我们知道,一个变量到底是指针还是数组主要看[]与*谁先与他结合,在这里*先与arr_p结合因此arr_p是一个指针,那它指向的是啥,它指向的是一个大小为3的数组,数组里面元素为int。

下面是数组指针定义与赋值:

	int(*arr_p)[3];
	int arr_value[3] = { 1,2,3 };
	arr_p = &arr_value;  //把数组arr_value当成一个整体,将变量arr_value的地址赋值给一个指针
	for (int i = 0; i < 3; i++)
	{
		cout<<(*arr_p)[i]<<endl; //这里(*arr_p)解指针获得变量arr_value
	}

 3、指针函数

int* func(){
}

 这就比较好理解了,简单来说就是定义一个函数func,其返回值类型为int*。

4、函数指针

int (*func_p)(int);

        怎么理解这段代码呢?我们首先看到的是(*func_p),说明func_p是一个指针,再看(int ),说明指针func_p它指向的是一个函数,函数输入参数的类型为int ,最后看左侧int 说明其func_p指向函数的返回值类型为int。

下面看看函数指针如何使用:

//定义函数
int func_1(int i){
	return 1*i;
}

int func_2(int i){
	return 2*i;
}

int main()
{
	int num=10;
	int (*func_p)(int);  //定义一个函数指针
	func_p=func_1;  //函数指针func_p指向函数func_1
	cout<<"func_1:"<<(*func_p)(num)<<endl;// 解指针获得指向的函数
	func_p=func_2;  //函数指针func_p指向函数func_2
	cout<<"func_2:"<<(*func_p)(num)<<endl;
	system("pause");
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值