C++ 什么';函数调用中使用多个星号是什么意思?
我想不出在函数调用中使用多个星号的任何实际用途:C++ 什么';函数调用中使用多个星号是什么意思?,c++,c,function-pointers,dereference,function-call,C++,C,Function Pointers,Dereference,Function Call,我想不出在函数调用中使用多个星号的任何实际用途: void foo(int a, char b) { } int main(void) { (**************foo)(45, 'c'); //or with pointer to function: void (*ptr)(int, char) = foo; (******ptr)(32, 'a'); } 为什么这个东西在C和C++中都允许使用?,因为 */COD>操作符期望地址值。每当需要一个
void foo(int a, char b)
{
}
int main(void)
{
(**************foo)(45, 'c');
//or with pointer to function:
void (*ptr)(int, char) = foo;
(******ptr)(32, 'a');
}
<>为什么这个东西在C和C++中都允许使用?,因为<代码> */COD>操作符期望地址值。每当需要一个值时(与对象或函数glvalue相反),在操作数上应用左值到右值、函数到指针和数组到指针的转换。因此,当再次取消引用时,被取消引用的函数会立即再次转换为指针 它们要么从对象读取值,要么生成一个指针值,分别指向数组或函数的开头 这些取消引用的行没有其他用途,只是为了让它平静下来 <>为什么这个东西在C和C++中都允许使用?< /P>
我不能为C++说话,但是对于C,至少函数指定符被转换成指针:
6.3.2.1-4 函数指示符是具有函数类型的表达式。除了 当它是sizeof运算符或一元&运算符的操作数时, 类型为“函数返回类型”的函数指示符为 已转换为具有指向函数的“”类型指针的表达式 返回类型“” 应用间接运算符可生成函数指示符: 6.5.3.2-3 一元*运算符表示间接。如果操作数指向 函数,结果是一个函数指示符 因此,无论您应用间接运算符多少次,都会得到相同的结果:一个函数指示符会立即转换为指针我认为这样做很少或没有用。
< P> C和C++中的一个标准转换是指针转换的函数;当函数名出现在表达式中时,可以将其转换为指向该函数的指针。因此:
相当于foo
&foo
相当于*foo
,或*(&foo)
foo
等同于**foo
,或**(&foo)
,或*foo
foo
这意味着您可以合法地在函数名之前添加任意数量的
*
,而无需更改其含义。不过,没有理由这么做。我的理解是
* is a pointer to a memory address
& is the value at the Memory address
*foo means pointer to foo memory address
**foo means *(*foo) *(foo memory address) This is a different value from *foo
它仍然是这样的…为了C模糊代码的竞争,它被明确地允许。可能最初的编码者是按代码的字符而不是按字符付费的line@TomTanner你连星号之间都不能换行吗?那真是太好了;)你可以在里面放任意多的空白