指针大集合

// 13-10-30_BugYang.cpp : 定义控制台应用程序的入口点。
//

#include "iostream"
using namespace std;

// a)一个整型数
// b)一个指向整型数的指针
// c)一个指向指针的的指针,它指向的指针是指向一个整型数
// d)一个有10个整型数的数组
// e)一个有10个指针的数组,该指针是指向一个整型数的
// f)一个指向有10个整型数数组的指针
// g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数
// h)一个有3个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int Function0(int n);
int Function1(int n);
int Function2(int n);

int test(int n)
{
	cout << "\n 测试函数指针: " << n;
	return n;
}

// 使用回调函数测试函数指针
void TestCallback(int n, int (*pFun)(int n))
{
	(*pFun)(n);
}

int _tmain(int argc, _TCHAR* argv[])
{
	int i = 0;
	// a)一个整型数
	int nNum = 5;
	cout << "\t\n" << nNum;

	// b)一个指向整型数的指针
	int* pNum = &nNum;
	cout << "\t\n" << pNum << ": " << *pNum;

	// c)一个指向指针的的指针,它指向的指针是指向一个整型数
	int **ppNum = &pNum;
	cout << "\t\n" << ppNum << ": " << *ppNum << ": " << **ppNum;
	
	// d)一个有10个整型数的数组
	cout << endl;
	int nArr[10] = {0,1,2,3,4,5,6,7,8,9};
	// 数组的元素的个数:sizeof(nArr) / sizeof(*nArr);
	for (i = 0; i <  sizeof(nArr) / sizeof(*nArr); ++i)
	{
		cout << "  " << nArr[i];
	}

	// e)一个有10个指针的数组,该指针是指向一个整型数的
	int n1 = 0, n2 = 1, n3 =2, n4 = 3, n5 = 4, n6 = 5, n7 = 6, n8 = 7, n9 = 8, n10 = 9;
	int *pArr[10] = {&n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9, &n10};
	for (i = 0; i < 10; ++i)
	{
		cout << "\n\t" << pArr[i] << ": " << *pArr[i];
	}
	
	// f)一个指向有10个整型数数组的指针
	int *pNums = new int[10];
	
	for (i = 0; i < 10; ++i)
	{
		*(pNums+i) = i;
		// *(pNums+i) 通过指针的算术计算和解引用访问数组元素
		// pNums[i] 指针通过下表操作可以直接访问数组元素 
		cout << "\n\t"<< pNums+i << ": " << *(pNums+i);
		cout << "\t" << &pNums[i] << ":" << pNums[i];
	}
	delete [] pNums;

	// g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数
	TestCallback(5, test);
	int (*pFun)(int n) = test;
	(*pFun)(10);

	// h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
	int (*pFuns[3])(int n) = {Function0, Function1, Function2};
	for (i = 0; i < 3; ++i)
	{
		(*pFuns[i])(i);
	}
	

	cout << "\n";
	return 0;
}

int Function0(int n)
{
	cout << "\n\t Call Function0"  << ": " << n;
	return n;
}

int Function1(int n)
{
	cout << "\n\t Call Function1" << ": " << n;
	return n;
}
int Function2(int n)
{
	cout << "\n\t Call Function2" << ": " << n;
	return n;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值