指针拾遗|||——指针数组、数组指针、函数指针、函数指针数组

指针拾遗|||——指针数组、数组指针、函数指针、函数指针数组

int *f[];//f: 指针数组
int (*f)[];//f: 数组指针

int (*f)();//f: 函数指针
int *(*f)();//f: 函数指针

int (*f[])();//f: 函数指针数组
int *(*f[])();//f: 函数指针数组

函数指针的两个例子如下:

eg1:int (*f)(int, float);
f 声明为一个函数指针
所指的函数接受两个参数: int型的值 和 float型的值;
返回一个整型值

eg2:int *(*g[])(int, float);
g 声明为一个数组,
数组元素为 一个函数指针
该函数指针所指的函数接受两个参数:int型的值 和 float型的值;
返回值为一个整型指针

在这里插入图片描述

//复杂的数组声明
constexpr int size = 10;
int arr[size] = { 0,10,20,30,40,50,60,70,80,90 };
int arr2[size] = { 0,1,2,3,4,5,6,7,8,9 };
//一、ptrs是个指针数组:1、ptrs是个数组,2、数组包含10个元素,3、每个元素是一个指向int型整数对象的指针
int *ptrs[size] = { arr,arr2 };
//err:不允许使用引用的数组
//int &refs[10];
//二、Parray是个数组指针,指向一维数组的指针,也成行指针:1、Parray是个指针,2、指针指向一个数组,3、数组包含10个元素,4、每个元素都是int型整数对象
int(*Parray)[size] = &arr;
//三、arrRef是个数组引用,arrRef绑定了数组arr:1、arrRef是个引用,2、引用绑定的对象是个数组arr,3、数组包含10个元素,4、每个元素的类型是int型整数对象
int(&arrRef)[size] = arr;
void test10()
{
	//复杂的数组声明
	constexpr int size = 10;
	int arr[size] = { 0,10,20,30,40,50,60,70,80,90 };
	int arr2[size] = { 0,1,2,3,4,5,6,7,8,9 };
	int *ptrs[size] = { arr,arr2 };//ptrs是个指针数组:1、ptrs是个数组,2、数组包含10个元素,3、每个元素是一个指向int型整数对象的指针
	//int &refs[10];//err:不允许使用引用的数组
	int(*Parray)[size] = &arr;//Parray是个数组指针,指向一维数组的指针,也成行指针:1、Parray是个指针,2、指针指向一个数组,3、数组包含10个元素,4、每个元素都是int型整数对象
	int(&arrRef)[size] = arr;//arrRef是个数组引用,arrRef绑定了数组arr:1、arrRef是个引用,2、引用绑定的对象是个数组arr,3、数组包含10个元素,4、每个元素的类型是int型整数对象

	cout << "遍历指针数组" << endl;
	for (auto p = ptrs; p != ptrs + 2; ++p)
	{
		for (auto q = *p; q != *p + size; ++q)
		{
			cout << *q << "\t";
		}
		cout << endl;
	}
	cout << endl;

	cout << "使用数组指针,遍历数组" << endl;
	//for (int *p = Parray[0]; p != *Parray + size; ++p)//这也OK
	for (int *p = *Parray; p != *Parray + size; ++p)
	{
		cout << *p << "\t";
	}
	cout << endl;

	cout << "遍历数组引用" << endl;
	for (auto iter = begin(arrRef); iter != end(arrRef); ++iter)
	{
		cout << *iter << "\t";
	}
	cout << endl;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值