为了账号安全,请及时绑定邮箱和手机立即绑定

由于只学了基本的C,刚进工作都不太懂这些,求指点

由于只学了基本的C,刚进工作都不太懂这些,求指点

狐的传说 2023-03-18 17:13:23
FUNC linkSyms [] = {__assert,abort,abs,acos,asctime,...这个开头的第一句是什么意思呢 能详细点帮忙解说下麽是定义linkSyms []数组内包含大括号后面的那么多参数么,FUNC是什么定义类型符啊?
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

我觉得应该式函数指针吧。
FUNC应该是一个宏定义的类型。
比如说#define FUNC void (*p)...

查看完整回答
反对 回复 2023-03-21
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

FUNC不是宏定义类型
linkSyms 为函数指针数组类型
应该是这样的:

void assert( int expression ); assert函数原形

void abort( void );abort函数原形

double acos(double x);acos函数原形

char *asctime( const struct tm *timeptr );asctime函数原形

他们不是同一函数指针类型的,这样用法是错误的,因为函数指针类型,判断它的类型是函数参数而不是函数名,就是说只要函数参数不一样,他们就是不同类型的:

帖个例子:

#include "stdafx.h"

#include "stdio.h"
typedef void (* FUNC)(int*); //把一有int指针类型参数的函数指针类型用*FUNC代替 

void one(int *i)

{

*i=*i+100;

}

void two(int *i)

{

*i=*i+200;

}

void Three(int *i)

{

*i=*i+300;

}

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

FUNC a[3]={one,two,Three};//函数名就是可以当作是函数指针,或者叫做函数入口地址

//在这里的3个函数因为它们的参数类型相同,所以他们为同一函数指针类型

int i=10;

a[0](&i);//执行one函数

a[1](&i);//执行two函数

a[2](&i);//执行Three函数

printf("%d\n",i);

return 0;

}


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信