-
typedef的用法之 typedef int (* func)(int ,int )
2017-04-21 10:54:58原文地址:http://blog.csdn.net/baoendemao/article/details/41209697 原文地址:... typedef int(FUNC1)(int in); ...typedef int(FUNC2)(int *,int *,int *); 上面的语句作用是 作一个函数声明原文地址:http://blog.csdn.net/baoendemao/article/details/41209697
原文地址:http://www.educity.cn/wenda/295697.html
typedef int(FUNC1)(int in);
typedef int(FUNC2)(int *,int *,int *);
上面的语句作用是 作一个函数声明类型.
如:FUNC1 A;
等价于声明一个函数:int a(int in);
同理
FUNC2 b;
等价于声明一个函数:int b(int *,int *,int*);
值得注意的是参数匹配:参数个数,参数类型---------------------------------------------------------------------------------------------------------------------------------------------
先看一下例子:
#include "iostream"
using namespace std;
int add(int a,int b){
return (a+b);
}typedef int (* func)(int ,int ) ;
void main(){
func f = add;
int n = f(1,2);
cout << n << endl;
}其中 typedef int (* func)(int ,int ) 比较难理解,因为我们知道typedef 是宏定义,一般的语法是这样:
typedef unsigned long ulong;
这个定义是用ulong作unsigned long 的别名
在这里的意思是定义一种指针类型lpAddFun,它是一种指向函数int (int,int)的指针,也就是说lpAddFun表示的是这种类型的函数的地址,因为:
函数名不是其类型的一部分函数的类型只由它的返回值和参数表决定.指向add()的指针必须指向与add()相同类型的函数带有相同的返回类型和相同的参数表 。
int (* func)(int ,int )和int* func(int ,int )是不同的,后者说明的是返回一个int类型的指针,所以括号是必须加的
例题:
#include<stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int *arg2)
{
//fun 为指向函数int multi(int*a,int*b,int*c)的指针
//arg1 = 10,arg2 =&a;FUNC1 *p = &inc; //p为指向函数inc的指针
int temp =p(arg1); //等价于 temp = inc(arg1) = inc(10) = 11
fun(&temp,&arg1, arg2);//运行fun()函数后,*arg2 = temp * arg1 = 11 * 10 = 110
printf("%d\n",*arg2);
}
int main()
{
int a;
show(multi,10,&a);
return 0;
}结果:110
-
typedef int ElemType
2012-11-28 10:57:151 typedef int ElemType; 为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的 最佳答案 ...1 typedef int ElemType;
为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的
最佳答案
定义不同的数据类型名称是为了程序的可读性.
而且一旦你需要将类型变换比如使用double型的了,只要写:
typedef double ElemType;
一下子就全改了,如果没有定义的话就要一个个的把int改成double,你不嫌麻烦么
2 typedef int(*CallBack)(char *p);这个太难理解了,怎么理解呢?
typedef int a
这个我就知道是什么意思,就是把a还代替int,请问
typedef int(*CallBack)(char *p),
这个又是什么意思呢?
typedef int(*CallBack)(char *p);
变量名:CallBack
1.*CallBack:CallBack是一个指针
2.(*CallBack)():指向一个函数
3.(*CallBack)(char *p):这个函数有一个参数,类型为char*
4.int(*CallBack)(char *p):这个函数有一个返回值,类型为int
最终:CallBack是一个指针,指向具有一个char*类型参数,且返回一个int型数据的函数
前面有个typedef,所以现在CallBack是这种类型的别名
int func(char *p){
...
}
...
CallBack my_callback1 = func;//OK
CallBack my_callback2 = &func;//OK
以上二者均可
-
typedef int a[10] 与typedef int* a[10];与typedef int (*a)[10] 与 typedef int * (*a)[10]
2018-01-24 21:44:39(可能有错误的理解,请大家指出* =*) 1) #define a int[10] (全错,直接文本替换) A) a[10] a[10]; B) a[10] a; C) int a[10]; D) int a; E) a b[10]; F) a b; ...2) typedef in(可能有错误的理解,请大家指出* =*)
1) #define a int[10] (全错,直接文本替换)
A) a[10] a[10];
B) a[10] a;
C) int a[10];
D) int a;
E) a b[10];
F) a b;
G) a* b[10];
H) a* b;
2) typedef int a[10];(a为定义一个int型大小为10的数组)
A) a[10] a[10];//错
B) a[10] a;//错
C) int a[10];//对,a是数组名,定义一个数组
D) int a;//对,定义一个变量a
E) a b[10];//对,定义一个二维数组b[10][10]
F) a b;//对,定义一个数组b[10]
G) a* b[10];//对,定义一个指向二维数组的指针b
H) a* b;//对,定义一个指向一维数组的指针b
3) #define a int*[10] (全错,直接文本替换)
A) a[10] a[10];
B) a[10] a;
C) int a[10];
D) int a;
E) a b[10];
F) a b;
G) a* b[10];
H) a* b;
4) typedef int* a[10]; (a的功能:定义一个大小为10指针数组)
A) a[10] a[10];
B) a[10] a;
C) int a[10]; //对,a是数组名,定义一个数组
D) int a;//对,定义一个变量a
E) a b[10];//对,定义一个指向二维数组的指针b
F) a b;//对,定义一个指针数组b[10]
G) a* b[10];对,定义一个指向二维数组的二级指针b
H) a* b;对,定义一个指向二维数组的二级指针b
5) #define a int*[10] (全错,直接文本替换)
A) a[10] a[10];
B) a[10] a;
C) int a[10];
D) int a;
E) a b[10];
F) a b;
G) a* b[10];
H) a* b;
6) typedef int (*a)[10] (a的功能:定义一个指向大小为10的数组的指针)
A) a[10] a[10];
B) a[10] a;
C) int a[10];//对,a是数组名,定义一个数组
D) int a;//对,定义一个变量a
E) a b[10];//对,定义一个指向二维数组的指针
F) a b;//定义一个指向大小为10的数组的指针
G) a* b[10];//对,定义一个指向(指向二维数组的)指针的指针,即二级指针
H) a* b;//定义一个指向(指向大小为10的数组的)指针的指针
7) #define *a * int[10] (全错,直接文本替换)
A) a[10] a[10];
B) a[10] a;
C) int a[10];
D) int a;
E) a b[10];
F) a b;
G) a* b[10];
H) a* b;
8) typedef int * (*a)[10] (a的功能:定义一个指向大小为10的指针数组的指针)
A) a[10] a[10];
B) a[10] a;
C) int a[10];//对,a是数组名,定义一个数组
D) int a;//对,定义一个变量a
E) a b[10];对,定义一个指向二维指针数组的指针
F) a b;//定义一个指向大小为10的指针数组的指针
G) a* b[10];//定义一个指向(指向二维指针数组的)指针的指针
H) a* b;定义一个指向(指向大小为10的指针数组的)指针的指针 -
typedef int(*P)(int )
2020-09-16 10:46:25typedef int(*P)(int ) typedef 主要的作用是给变量取别名,但是存在一些比较特殊的用法。可用于通过给函数起别名的方式定义回调函数。 typedef int(*P)(int ) 这里相当于是给函数指针 P 起了个别名。那么可以用 P ... -
typedef int status
2013-09-30 11:25:00是个自定义类型的语句,typedef用来定义类型的别名,statusi就相当于inti 转载于:https://www.cnblogs.com/seasonsstory/p/3347011.html -
typedef int (* func)(int ,int )
2014-11-17 15:10:46先看一下例子: #include "iostream" using namespace std; int add(int a,int b){ return (a+b);...typedef int (* func)(int ,int ) ; void main(){ func f = add; int n = f(1,2); cout } -
typedef int(FUNC1) (int in)
2018-07-20 14:29:59首先看一个例子: #include <stdio.h> int inc(int a) { return (++a); } int multi(int *a,int *b,int *c) ...typedef int (FUNC1) (int );...typedef int (FUNC2) (int *, i... -
关于typedef int (*pFunc)(int, int)
2013-08-15 22:32:25typedef int (*pFunc)(int, int) 申明一个指针变量pFunc, 指向int (*)(int, int) 从而可以 pFunc func; int add(int a,int b){ return (a+b); } typedef int (* func)(int ,int ) ; void main(){ ... -
typedef int ElemType的理解
2020-03-11 18:51:18typedef int ElemType; 为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的 最佳... -
typedef int (*funp_t)(int) 和typedef int fun_t(int)的比较
2015-04-05 19:24:09typedef int (*funp_t)(int)定义一个函数指针类型 funp_t; 而typedef int (fun_t)(int)定义一个函数类型 fun_t; funp_t p; // 定义一个类型是 int ( *) ( int ) 的变量p,即:函数指针p fun_t p; // 声明... -
C语言typedef void fun(int) 与typedef void (*pfun)(int)类型
2013-09-11 20:20:071,typedef void fun(int)类型 声明:typedef void alias(int) , 定义函数 void fun(int a){ ptintf("%d = a\n",a);} 这是可以可以这样用,alias * a = fun; 调用 #include typedef void alias(int); int main... -
typedef int int_array[4]
2015-03-29 21:37:49这个出现在C++prime第四版第124页,刚看没理解#include using namespace std; int main() { int ia[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};... typedef int int_array[4]; for(int_array *p=ia;p!=ia+3;++p) -
题目,关于: typedef int (* func)(int ,int )
2017-06-18 14:36:59例题: #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) ...typedef int(FUNC1)(int);...typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fu -
typedef int Long_int [3]个人理解
2014-09-07 10:20:43定义长整数为: typedefintLong_int[3] /* typedef: typedef与#define有些类似,但在一些复杂用法上就不同了。 1.定义一种类型的别名 2.用在旧的C代码中,帮助struct.以前的代码中,生命struct新对象时,必须... -
typedef介绍
2019-08-21 17:18:48typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 typedef本身是一种存储类的关键字,与auto、extern、static、... -
关于typedef int(*lpAddFun)(int, int)
2013-11-09 03:58:07lpAddFun是typedef定义的一个名称 可以用来定义变量 比如 lpAddFun p; 那 p就是 int(*p)(int, int); 首先(*p)说明p是一个指针,(*p)();说明p指向函数 (*p)(int, int)说明p指向的函数有两个int类型参数, 最后 int(*... -
#define a int[10] typedef int a[10]
2016-06-29 19:59:14#define a int[10]和typedef int a[10]的使用方法 -
关于typedef int (*ADDPROC)(int a, int b)
2014-10-09 09:26:20在DLL学习中出现了一个不太好懂的语句: typedef int (*ADDPROC)(int a, int b) -
typedef int int_array[4];
2011-12-12 15:01:23#include using namespace std; int main() { int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};... typedef int int_array[4]; for (int_array *p =ia;p!= ia+3;++p) { for (int *q=*p;q!=*p+4;++q) { cou -
typedef int (* func)(int ,int ) 定义函数指针类型 的理解
2015-09-07 16:39:48#include "iostream" using namespace std; int add(int a,int b){ ...typedef int (* func)(int ,int ) ; void main(){ func f = add; int n = f(1,2); cout } 其中 typedef int -
typedef int * q与#define p int*区别
2017-10-23 19:41:32#define 预处理指令,在编译...typedef int * q与#define p int* 作用都是用 q或p代替int*,但是正如前面所说,#define只是进行简单的替换,而typedef是采用如同定义变量的一种方法来声明一种类型 也就是说: #define -
typedef int* PINT与#define PINT int*的区别
2017-03-09 17:48:54这是一个很多人都不会用错但是却不甚了解的知识点,(正因为不会用...typedef int* PINT_TYPconst int * a; const PINT_DEF b; const PINT_DEF c;有人认为上面三条语句在typedef与#define替换之后皆一样,亦即:const i -
typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);
2013-08-20 17:40:18typedef int(init_fnc_t) (void); 这个就是一个取别名的过程。 我们通常情况下会如下使用 typedef : typedef int MyInt; MyInt a; 这个时候我们的MyInt 就和int是一样的意思。 而对于函数的申明我们通常会这样... -
typedef中的typedef void sigfunc(int);
2016-01-20 09:34:43typedef void sigfunc(int); sigfunc *signal(int signr,sigfunc *handler); 其中typedef定义了一个有一个整型参数无返回值的函数类型。void (*handler)(int)表示一个有一个整型参数无返回值的函数指针...