类型 + 指针数组大小 + 语法中的括号含义
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*
的值
这匹配 fun1
、fun2
和 fun3
的签名。事实上,数组中充满了指向这 3 个函数的指针。不带()
的函数名表示指向函数的指针,不调用该函数,不需要使用&
获取地址。
我周六有期中考试,所以我们老师给了我们去年的期中考试帮助。所以有个问题我很难理解。问题是“填写问号以便程序输出字符串 '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*
这匹配 fun1
、fun2
和 fun3
的签名。事实上,数组中充满了指向这 3 个函数的指针。不带()
的函数名表示指向函数的指针,不调用该函数,不需要使用&
获取地址。