指针的使用方式明显不一致,我不明白。
以下代码取自Pointers in C: when to use the ampersand and the asterisk?:
void swap(int *x, int *y) {int tmp = *x; *x = *y; *y = tmp; }
...
int a = 1, b = 2;
printf("before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("after swap: a = %d, b = %d\n", a, b);
以下代码取自https://en.wikipedia.org/wiki/Typedef:
int do_math(float arg1, int arg2) {
return arg2;
}
int call_a_func(int (*call_this)(float, int)) {
int output = call_this(5.5, 7);
return output;
}
int final_result = call_a_func(&do_math);
这是我不明白的地方:
在第一种情况下,为了抵消引用运算符的影响,解除引用运算符与x
和y
一起使用,因此为了使用它们或多或少相同如果你没有通过引用传递它们,你可以使用它们而无需解除引用,你可以将它们与*
一起使用。但在第二种情况下,call_this
不会使用解除引用操作符来调用,该操作符可以抵消它通过引用传递的事实;即它不被称为(*call_this)(5.5, 7)
。
为什么你会使用*
来抵消通过引用传递的效果,这样你就可以像往常一样在变量的情况下使用这个东西,但不是在这种情况下功能?
答案 0 :(得分:2)
您可以调用函数指针和函数:
void (*a)();
void (b)();
// Both valid
a();
b();