类型 + 指针数组大小 + 语法中的括号含义

type + pointer array size + paranthesis meaning in syntax

我周六有期中考试,所以我们老师给了我们去年的期中考试帮助。所以有个问题我很难理解。问题是“填写问号以便程序输出字符串 'accioccium'.

对于不想花钱解决的人,答案是 1,2 和 spell2。

那么这里发生了什么?特别是,char* (*a[3]) (char *, char *) 是什么?我的意思是我们正在创建一个字符指针数组,但最后的括号是什么?

此外,a[0] = fun1也很奇怪。是的,您可以按功能分配变量。但是,这里没有 fun1 函数的参数。假设参数是常量 *s 和 *p。但这一次,他们是什么?

#include <stdio.h>
#include <string.h>

char* fun1(char *s, char *p) {
    return s+strspn(s,p);}

char* fun2(char *s,char *p) {
    return strcat(s,p);}

char* fun3(char *s,char *p){
    return strstr(s,p);}


char* (*a[3]) (char *,char *);

int main(void) {
    int i;
    char spell1[10] = "accio";
    char spell2[10] = "aparecium";
    char* result;

    a[0] = fun1;
    a[1] = fun2;
    a[2] = fun3;

    result = (*a[?]) (spell1, "c");
    printf("%s",result);

    result = (*a[?]) (?, "c");
    printf("%s",result);

    return 0;}

感谢您的宝贵时间和帮助。

Especially, what is char* (*a[3]) (char *, char *) ? I mean we are creating a char pointer array but what is that paranthesis at the end?

这是一个包含 3 个指向函数的指针的数组,该函数接受 2 个指向 char 的参数指针和 returns 指向 char 的指针。

赋值a[0] = fun1不需要参数,fun不执行,只赋值给兼容指针a[0],以后需要的时候才加参数执行函数,例如在行 result = (*a[?]) (spell1, "c");

中完成
char* (*a[3]) (char *,char *);

a开始,“顺时针”或“先挑右边的东西”:

  • a

  • [ 是数组

  • 3]) 共 3

  • (* 指针

  • (...) 最后,函数

  • char *,char * 接受两个 char*

    类型的参数
  • char* 开头,返回类型为 char*

    的值

这匹配 fun1fun2fun3 的签名。事实上,数组中充满了指向这 3 个函数的指针。不带()的函数名表示指向函数的指针,不调用该函数,不需要使用&获取地址。