65,180
社区成员




[quote=引用 6 楼 nsxzclx 的回复:] [quote=引用 2 楼 openXMPP 的回复:] 修饰函数指针时,加不加"&" 函数指针是一样的 #include <stdio.h> void foo(){ printf("foo called\n"); } int main(){ printf("%p\n", foo); printf("%p\n", &foo); void (*FUNC) (); FUNC = foo; FUNC(); printf("address %p\n", FUNC); printf("address %p\n", &FUNC); return 0; } 输出 macbook:test mac$ ./a.out 0x10d99deb0 0x10d99deb0 foo called address 0x10d99deb0 address 0x7fff52262a70 注意看最后一个输出
[quote=引用 2 楼 openXMPP 的回复:] 修饰函数指针时,加不加"&" 函数指针是一样的 #include <stdio.h> void foo(){ printf("foo called\n"); } int main(){ printf("%p\n", foo); printf("%p\n", &foo); void (*FUNC) (); FUNC = foo; FUNC(); printf("address %p\n", FUNC); printf("address %p\n", &FUNC); return 0; } 输出 macbook:test mac$ ./a.out 0x10d99deb0 0x10d99deb0 foo called address 0x10d99deb0 address 0x7fff52262a70 注意看最后一个输出
你需要明白,你这儿涉及到两个类型。 比如: typedef int func(int, int); typedef int (*func_ptr)(int, int); func 和 func_ptr 是两种不同的类型,你可以自己输出结果看看。 std::cout<<typeid(func).name()<<std::endl; std::cout<<typeid(func_ptr).name()<<std::endl; 某些情况下,前者可以隐式转换成后者。 另外:你举得例子 func x = add; 在 gcc 下无法编译通过。
A function designator is an expression that has function type. Except when it is the operand of the sizeof operator54) or the unary & operator, a function designator with type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to function returning type’’.
修饰函数指针时,加不加"&" 函数指针是一样的 #include <stdio.h> void foo(){ printf("foo called\n"); } int main(){ printf("%p\n", foo); printf("%p\n", &foo); void (*FUNC) (); FUNC = foo; FUNC(); printf("address %p\n", FUNC); printf("address %p\n", &FUNC); return 0; } 输出 macbook:test mac$ ./a.out 0x10d99deb0 0x10d99deb0 foo called address 0x10d99deb0 address 0x7fff52262a70 注意看最后一个输出
[quote=引用 1 楼 wangjunsheng 的回复:] 可以不用 用了表明函数指针更直观些,当然这个取决于编程风格吧
可以不用 用了表明函数指针更直观些,当然这个取决于编程风格吧