指针数组、数组指针和指针函数、函数指针简单辨析

一、指针数组、数组指针
指针数组:本质是一个数组,数组内存放的元素是指针类型(32位平台4字节)

char *arr[4] = {"hello", "world", "shannxi", "xian"};
//arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。

数组指针:本质是一个指针,这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

char (*pa)[4];

二、指针函数、函数指针
指针函数:本质是一个函数,而该函数的返回值是一个指针。

int *fun(int x,int y);
int * fun(int x,int y)int* fun(int x,int y);
//指针函数
void* f(int a,int b){
    Data * data = new Data;
    data->a = a;
    data->b = b;
    return data;
}

调用:
Data * myData = static_cast<Data*>(f(4,5));

函数指针:本质是一个指针变量,该指针指向这个函数。或者说函数指针就是指向函数的指针。

int (*fun)(int x,int y);
int add(int x,int y){
    return x+y;
}
int sub(int x,int y){
    return x-y;
}
//函数指针
int (*fun)(int x,int y);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //第一种写法
    fun = add;
    qDebug() << "(*fun)(1,2) = " << (*fun)(1,2) ;
	//第二种写法
    fun = &sub;
    qDebug() << "(*fun)(5,3) = " << (*fun)(5,3)  << fun(5,3)return a.exec();
}

总结:指针数组、数组指针;指针函数、函数指针,本质就看后面的两个字,因为前面的相当于修饰语。

你可能感兴趣的:(C语言,c++)