扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
定义一个变量,系统的确会分配一个内存单元A来存储这个变量。而A的固定地址已经是物理地址了。不需要在分配一个来存储该地址。
成都创新互联公司服务项目包括尚志网站建设、尚志网站制作、尚志网页制作以及尚志网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,尚志网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到尚志省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
该变量已经实际存在在内存物理地址上了。
函数的地址是在代码空间中,在编译时就分配好了。
代码空间就是系统中存放你写的代码的地方,不同的行地址当然就不一样咯
不能,在一开始创建的时候计算机就会自动分配给它特定的地址,况且有些地址还是不能访问的。
你说的for,我看出来你已经知道存在那些功能,但是还不知道某个功能是不是被实现了,下面又是一个例子:
FUN funs[16]={fun1,NULL,fun3};//假设我们知道最多也就16个功能,但是目前只有功能0和2被实现,功能1和其他的3~15都还没有实现
for(...)
{
int funCode;
...
if(funs[funCode]!=NULL)//如果不是NULL,说明对应的功能号被实现了
funs[funCode](...)//调用
}
---------------------------------------------------------
楼主,C语言是不应该干这件事的!
楼主你的需求实际上可以这样描述:
1 怎样才能根据输入条件来调用不同的函数
2 条件和函数是一一对应的,但是函数在哪是不确定的,例如可能是其他函数传进来的。
我举个简单例子来解决你的问题
typedef void (*FUN)(...);//参数列表和返回值自己填
//定义一些功能函数
void fun1(...)
{
printf("1\n");
}
void fun2(...)
{
printf("1\n");
}
....
//上面的注意了,参数列表和返回值要一样的
FUN funs[]={fun1,fun2,...};//把函数的指针放进数组,就像你C51的向量区,存放了许多函数的地址,这里最终放的也是地址,只不过等程序编译好了才知道是多少,
...//一堆代码
int funCode;//用来存放计算出来的功能代码,例如0表示fun1,1表示fun2
...//一堆超级复杂而且重要且不可逃避的代码之后,funCode被设为了某个值,这个这个值实际上是我精心而且故意设计为理解简单的小玩意,代表某个功能的代码。
funs[funCode](...)//调用功能函数(知道funCode需要精心设计了吧,funCode为0就调用了fun1),当然你也可以把funs传到某个函数,然他也像这样使用传进去的函数。
不是的
1、实参在定义时就开辟存储单元,这个存储单元地址在整个程序中是固定不变的;
2、只有在函数调用时才给形参开辟存储空间,如果是值传递,则将实参的值赋给形参,如果是地址传递,则为形参开辟一个临时指针变量,然后把实参的地址传送给形参
3、函数执行完毕返回主程序时,释放形参所占的存储单元。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流