, char *(*g(char a, int b)) 是什么意思?

时间:2021-06-22 15:11:41

标签: c

以下声明是什么意思?

char *(*g(char a, int b))

到目前为止,我知道,

char *(*g)(char, int)

声明一个指向返回 char * 的函数的指针,我可以成功地为它赋值,但是我不能对第一个做同样的事情。有什么提示吗?

4 个答案:

答案 0 :(得分:2)

它看起来像一个函数 g,它接受​​两个参数(char aint b)并返回 char**

外括号看起来像 char** x = /* some value */; char y = *(*x);

作为证明,这段代码可以编译:

char *(*g(char a, int b));

char** test(void) {
    return g(0, 0);
}

答案 1 :(得分:2)

问题中的两行代码差别很大:

char *(*g(char a, int b))  // #1

char *(*g)(char, int)      // #2

在 #2 中,您在 ) 之后添加了一个 g,这确实改变了很多含义。

第一个只是一个名为 g 的函数。一样的

char **g(char a, int b)   // #1 without the unnecessary ( ) pair

但第二个是名为 g函数指针变量。

这也解释了为什么您可以在情况 #2 时分配给 g,而在情况 #1 时不能分配给 g

另请注意,#1 是返回 pointer-to-pointer-to-char 的函数,而 #2 是指向返回 pointer-to-char 的函数的函数指针强>

所以这两行代码有不止一个方面的不同。

答案 2 :(得分:1)

{ "type": "COLUMN", "properties": { "span": 2 }, "children": [ { "rest of the code here" }, ], }, { "type": "COLUMN", "properties": { "span": 10, }, "children": [], }, "rest of code" 是什么意思?

g as function (char, int) returning pointer to pointer to char

答案 3 :(得分:0)

当你写:

char *(*g)(char, int);

g 是一个指向函数的指针...

你是否有几个函数接受一个字符和一个整数作为参数并返回一个'char *',你可以将这些函数中的任何一个分配给这个指针..

示例:

char *function1(char c, int i) {
   ...
}

char *function2(char c, int i) {
...
}

当你像下面看到的那样声明一个指针时,它可以指向上述任何一个函数:

char *(*g)(char, int);

你可以写:

g = function1 ;

或:

g = function2 ;

当你使用指针调用函数时:

char *retVal = (*g)('a', 12) ;

它将根据分配给指针的最后一个函数调用 function1 或 function2。

至于:

char *(*g(char a, int b)) 

这相当于:

char **g(char a, int b) 

考虑到运算符 () 的优先级为 1,运算符 * 的优先级为 2,括号不影响计算顺序。

相关问题