C 指针两种不常用法

发行日期:

介绍C 语言中两种不常用的指针定义形式及其用法。

One

// *p 指向一个具有2个元素的一维数组
int Print (int (*p)[2])
{   // *p 相当与*arry,代表arry 数组的0行0列的首地址
    // pass
}

int main()
{
    // 定义一个arry 二维数组
    int arry[3][2]={{1,2},{3,4},{5,6}};
    // 将arry数组的首地址,递交给Print() 函数
    Print(arry);
    return 0;
}

简化了对二维数组的调用。

Two

int compare(int x,int y)
{
    // pass
}

// 定义一个指向函数的指针,函数返回值为 int 型
int (*p)(int x,int y)
{
    // pass
}

int main()
{
    int num1,num2;
    // 将compare()函数的 首地址,赋予指针*p
    p=compare;
    compare(num1,num2);
    // 此时,(*p)(num1,num2) 与compare(num1,num2) 等价
    (*p)(num1,num2);
    return 0;
}

若把这种方法用在子函数的函数参数列表中,会有意想不到的好处。

比如:

// 回调函数 :)
void proccess(int x,int y,int (*p)(int,int))