重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
定义一个变量,系统的确会分配一个内存单元A来存储这个变量。而A的固定地址已经是物理地址了。不需要在分配一个来存储该地址。
成都创新互联公司是专业的永新网站建设公司,永新接单;提供成都网站制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行永新网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
该变量已经实际存在在内存物理地址上了。
你说的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传到某个函数,然他也像这样使用传进去的函数。
函数的地址是在代码空间中,在编译时就分配好了。
代码空间就是系统中存放你写的代码的地方,不同的行地址当然就不一样咯
变量是存放在内存中的,只要是存放在内存中的二进制数就会有一个内存的地址,所有变量是有地址的!
那函数是什么呢?函数是由一些运行的语句组成的,程序运行的时候就会把函数中的语句调用到内存中去,那么函数代码在内存中开始的那个内存空间的地址就是函数的地址!
至于函数中用的变量的地址并不是放在代码区的,一般都放在另外的两个地方,其实地址上是有很大的差值的
希望你能理解上面的内容,祝愿你学习C语言能马到成功!