// 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;
}