如何理解int *(*a[5])(int, char*);

简介:
int *(*a[5])(int, char*);  
拆开来分析:
typedef int* (*f)(int,char*);
f a[5];

所以a是个5个元素的数组,每个元素为函数指针.


可用代码验证:

#include <stdio.h>
#include <stdlib.h>

int* (*a[5])(int,char*);

int *foo(int n, char *s)
{
	int *p;

	p = (int *)malloc(sizeof(int));
	*p = n + atoi(s);

	return p;
}

int main(int argc, char *argv[])
{
	int *p;

	a[0] = &foo;
	p = (*a[0])(1, "2");

	printf("%d\n", *p);

	return 0;
}

输出:

3


顺便把函数指针再复习一下:

#include <stdio.h>
#include <stdlib.h>

//int* (*a[5])(int,char*);

typedef int (*f)(int,char*);
f funp;

int foo(int n, char *s)
{
	return 10086;
}

int main(int argc, char *argv[])
{
	funp = &foo;

	printf("%x\n",funp);
	printf("%d\n",(*funp)(6,"test"));

	return 0;
}

输出:

3f1000
10086


相关文章
|
4月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
计算 int, float, double 和 char 字节大小。
52 3
|
4月前
|
存储 Web App开发 编译器
C语言程序设计——int,double,char的用法
C语言程序设计——int,double,char的用法
|
11月前
|
存储 C语言
C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
62 1
|
4月前
|
存储 人工智能 编译器
learn_C_deep_5 (温故知新、sigend char a = -128的深度理解、unsigned int类型的写法规范)
learn_C_deep_5 (温故知新、sigend char a = -128的深度理解、unsigned int类型的写法规范)
|
10月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
75 1
|
11月前
|
存储 小程序 程序员
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
105 0
对int,char,float,double进行求和操作
对int,char,float,double进行求和操作
152 0
|
存储 关系型数据库 MySQL
MySQL 中 int (10) 和 char (10) 和 varchar (10) 的区别
MySQL 中 int (10) 和 char (10) 和 varchar (10) 的区别
148 0
|
关系型数据库 MySQL C++
类型收窄 error C2397: conversion from ‘const int‘ to ‘char‘ requires a narrowing conversion
类型收窄 error C2397: conversion from ‘const int‘ to ‘char‘ requires a narrowing conversion
152 0