int *p(int int)与int (*p)(int int)区别?
来源:百度知道 编辑:UC知道 时间:2024/05/15 10:13:36
第二种
(*p)在int ()中间,表示(*p)是函数,这个函数未定参数表,返回值是int型的;
再看(*p),p前有*,表示p为指针,这个指针指向的对象是前面那个函数。
p的使用举例:
int f()
{
...
}
int main()
{
int (*p)(); // 声明p变量
...
p = f; // p指向f函数
(*p)(); // 调用f函数
p(); // 简写形式,和上面的等价
...
}
那第一种呢?区别又是什么?
(*p)在int ()中间,表示(*p)是函数,这个函数未定参数表,返回值是int型的;
再看(*p),p前有*,表示p为指针,这个指针指向的对象是前面那个函数。
p的使用举例:
int f()
{
...
}
int main()
{
int (*p)(); // 声明p变量
...
p = f; // p指向f函数
(*p)(); // 调用f函数
p(); // 简写形式,和上面的等价
...
}
那第一种呢?区别又是什么?
第一个
单步运算是右结合p先与()结合 说明p是一个函数 这个函数返回一个指针 这个指针指向了一个int型数据
第二个
因为有*p带有一个括号,所以*与p先集合 说明p是一个指针 然后和()结合 说明这个指针指向了一个函数 这个函数的返回值是int型
不明白的可以写再补充里
第一个,声明了一个名为p的函数。
举个例子:
#include <iostream>
using namespace std;
void foo(int)
{
cout << "foo\n";
}
int main()
{
// p是函数指针
void (*p)(int) = foo;
p(1);
(*p)(1);
// 这个是函数声明
int* bar(int);
bar(1);
}
int* bar(int)
{
cout << "bar\n";
return 0;
}
我觉得把&或*号写地靠近类型比较好,C++就强调类型:
int* p();
这样一眼就能看出,p是个函数。