指针数组、数组指针、指针函数、函数指针

来源:互联网 发布:java字符串拼接函数 编辑:程序博客网 时间:2024/06/03 13:13

 C++中容易混淆的几个基础概念:
1、指针数组:元素为指针的数组(整型数组)
2、数组指针:指向数组的指针(指向数组首地址的指针)
3、指针函数:返回值为指针的函数(整型函数)
4、函数指针:指向函数入口地址的指针(每个函数都有一个类似于main()的入口地址)

下例只要看下定义,然后运行下程序简单的看下就明白了区别,把“指针”换成“整型”就不会搞混了
 

指针数组:
// FunctionPointArray.cpp : 定义控制台应用程序的入口点。
//函数指针数组:
//是一个数组
//数组元素是指向一个函数入口地址的指针
#include "stdafx.h"
#include <iostream>
using namespace std;
int max(int x, int y){return x>y?x:y;}
int min(int x, int y){return x<y?x:y;}
int (*nP)(int, int);  
int (*nPointArr[2])(int, int);   //函数指针数组
typedef int (*nF)(int, int)
typedef int (*nFunArr[2])(int, int)
int main()
{
    nP = max;
    int nMax = nP(5,6);
    cout << "Function Point:" << nMax << endl;
    nF minPoint = min;
    int nMin = minPoint(5,6);
    cout << "typedef Function Point:" << nMin << endl;
   
    nPointArr[0] = min;
    nPointArr[1] = max;
    cout << "Function Point Arr Min Value:" << nPointArr[0](1,2) << endl;
    cout << "Function Point Arr Max Value:" << nPointArr[1](1,2) << endl;
    nFunArr FunArr;
    FunArr[0] = max;
    FunArr[1] = min;
    cout << "typedef Function Point Arr Max Value:" << FunArr[0](1,2) <<endl;
    cout << "typedef Function Point Arr Min Value:" << FunArr[1](1,2) <<endl;
    return 0;
}

数组指针:也称行指针。
定义:int (*p)[n],首先p是一个指针,指向整型一维数组,一维数组的长度是n,n亦是
p的步长,即执行p+1要跨过n个整型长度
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    int (*p)[4];
    int arr[3][4] = {{1,2,3,4}{4,5,6,7}{5,6,7,8}};
    p = arr;
    cout << "The Point first num:" << (*p)[0] << endl;
    p += 1;
    cout << "Aftef p+1 the Point first num:" << (*p)[0] << endl;
    return 0;
}
可以得出的输出结果:
The Point first num:1
After p+1 the Point first num:4
 
指针函数:
// PointFunction.cpp : 定义控制台应用程序的入口点。
//指针函数:返回类型是指针的函数
#include "stdafx.h"
#include <iostream>
using namespace std;
int *fun(int x, int y)
{
    int nMax = (x>y?x:y);
    int *nP = &nMax;
    return nP;
}
int main()
{
    int m = 1, n = 9;
    int *nQ = fun(m, n);
    cout << *nQ << endl;
    return 0;
}
 
函数指针:
// FuctionPoint.cpp : 定义控制台应用程序的入口点。
/*
int fun(int x, int y);
int (*f)(int, int);
f = fun;
*/
//函数指针可以改变指向的函数,但不存在++、--
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int (*nfunc)(int ,int);
int max(int x, int y){return x>y?x:y;}
int (*mP)(int, int);
int main()
{
    mP = max;
    int nMax = mP(1,2);
    nfunc funPoint = max;
    int nNum = funPoint(4,5);
    cout << nMax << endl;
    cout << nNum << endl;
    return 0;
}
0 0
原创粉丝点击