指针可以带参数吗?这3种指针有啥区别

Posted

技术标签:

【中文标题】指针可以带参数吗?这3种指针有啥区别【英文标题】:Can a pointer take arguments? What is the difference between these 3 kind of pointers指针可以带参数吗?这3种指针有什么区别 【发布时间】:2018-05-12 09:05:41 【问题描述】:

我想知道以下语句的含义。

int *abc(int,int);
int (*abc)(int,int);

以及这些指针与普通指针有何不同。例如:

int *ptr;

谢谢

【问题讨论】:

用什么编程语言? @JJJ C 或 C++ 将被应用。 正确标记问题将不胜感激 ***.com/questions/840501/… 我会确保从下一次开始这样做。谢谢JJJ.. 【参考方案1】:

指针可以带参数吗?

不,指针只是一个存储内存位置地址的变量。

int *abc(int,int);

这是函数 abc 的声明,它接受两个参数,都是 int 类型,并返回一个指向 int 类型的指针。

int (*abc)(int,int);

这里,abc 是一个指针,它可以指向一个函数,该函数接受两个 int 类型参数并返回一个 int。 说,如果你有一个函数fun

int fun(int a, int b) 
    return a + b;

abc 可以指向fun(),像这样:

abc = fun;

然后你可以使用abc指针调用函数fun,像这样:

abc(4, 5);

这些指针与普通指针有何不同。例如: int *ptr;

这里,ptr 是一个指针,可以存储int 类型的地址。

因此,所有的指针都存储一些内存位置,区别在于它们指向的类型的地址。

【讨论】:

【参考方案2】:

假设 C/C++ this: int *abc(int,int); 是一个函数原型,它返回一个指向 int 的指针并接受两个 int 类型的参数

this: int (*abc)(int,int); 是一个指向函数的指针的声明,该函数返回 int 并接受两个 int 类型的参数

【讨论】:

int (*abc)(int,int); 只是一个指针变量,不是任何类型的“原型”。

以上是关于指针可以带参数吗?这3种指针有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Qt带参数的信号,和指针函数和函数指针

不带星号的函数指针参数

指针函数与函数指针的区别

指针函数与函数指针的区别

linux系统中参数-和--有啥区别?

指针函数与函数指针的区别