c语言调用汇编函数,函数调用,这个有点不太懂

关于C语言函数的调用,纹身吗会有错误能,是我声明的函数不对吗?编译环境是VC6.0_百度知道
关于C语言函数的调用,纹身吗会有错误能,是我声明的函数不对吗?编译环境是VC6.0
}main(void){ three_hello#include&lt:}void three_hello(void){ int i: error C2143;i& before 'i++)
hello();;hhhhh& for(i=0;;void holle(void){ printf(&quot.h&gt: missing 'type''3;);}这是错误的代码 : warning C4550
提问者采纳
hello()#include&hhhhh&void hello(){ printf(&i&}int main(){ three_hello();3;}void three_hello(){ ); for(i=0;return 0
提问者评价
其他类似问题
c语言函数的相关知识
其他2条回答
three_=&three_hello();
这个是什么意思 我刚学这个
#include&stdio.h&void holle(void){ printf(&hhhhh&);}void three_hello(void){
for(i=0;i&3;i++)
hello();}main(void){ three_hello();//调用函数时后面一定要的括号的}
这个加上括号 还是会有上面的问题
您可能关注的推广回答者:回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁页面导航:
→ 正文内容 c语言 函数指针
C语言中函数与指针的应用总结
本篇文章是对C语言中函数与指针的应用进行了详细的分析介绍,需要的朋友参考下
1. 首先,在C语言中函数是一种function-to-pointer的方式,即对于一个函数,会将其自动转换成指针的类型. 代码如下:#include&stdio.h&
void fun(){}
int main(void){&& printf("%p %p %p\n", &fun, fun, *fun);&& return 0;}-------------------------------------------------------------------------------------------这三个值的结果是一样的. 其实对于最后的那个*fun, 即使前面加上很多个*号, 其结果也不变, 即**fun, ***fun的结果都是一样的. 对于这个问题, 因为之前讲过函数是一种function-to-pointer方式, 其会自动转换成指针的类型, &fun是该函数的地址, 为指针类型, fun是一个函数, 会转换成其指针类型, 而对于*fun, 由于fun已经变成了指针类型, 指向这个函数, 所以*fun就是取这个地址的函数, 而又根据function-to-pointer, 该函数也转变成了一个指针, 所以以此类推, 这三个值的结果是相同的.
===================================================2. 如何调用一个地址上的函数如果知道了一个函数所在的地址, 可以将其强制转化成某一种类型的函数指针, 然后再根据这个指针去调用这个地址的函数. 如: 代码如下:#include&stdio.h&
void f(int i){&& printf("i = %d\n", i);}
int main(void){&&&& add = (unsigned long)f;&& ((void (*)(int))add)(10);&& (*(void (*)(int))add)(20);&& return 0;}---------------------------------------------------------------------------------------使用(void (*)(int))的方式可以将一个地址转换成一个带int参数且没有返回值的函数的指针类型, 然后再去调用, 由于第1点中讲的function-to-pointer, 所以最后两条语句中加与不加那个*号效果都是一样的. 在嵌入式方面经常用到这种方式.=====================================================3. 函数指针数组的用法.有时候需要定义一个数组, 其内容为一系列的函数指针, 然后对其进行调用, 如: 代码如下:#include&stdio.h&int max(int v1, int v2){&& return (v1 & v2 ? v1 : v2);}
int min(int v1, int v2){&& return (v1 & v2 ? v1 : v2);}
int sum(int v1, int v2){&& return (v1 + v2);} 代码如下:int main(void){&& int (*p[3])(int, int);&& p[0] =&& p[1] =&& p[2] =
&& printf("p[0] = %d\n", (p[0])(3, 5));&& printf("p[1] = %d\n", (p[1])(4, 6));&& printf("p[2] = %d\n", (p[2])(1, 2));&& return 0;}-----------------------------------------------------------------------------------------虽然感觉这种方法有点累赘, 但是也算是一种使用的方式, 所以介绍一下.============================================4.返回一个指向数组的指针的方式
可以让函数返回一个指向数组的一个指针, 如: 代码如下:#include&stdio.h&#include&stdlib.h&int (*p())[10]{&& int (*m)[10];&&&& m = (int (*)[10])malloc(10 * sizeof(int));&& if (m == NULL) {&&&&& printf("malloc error\n");&&&&& exit(1);&& }&& for (i = 0; i & 10; i++)&&&&& *(*m+i) = i+1;&&} 代码如下:int main(void){&& int (*a)[10];&&&& a = p();&& for (i = 0; i & 10; i++)&&&&& printf("%d ", *(*a+i));&& printf("\ndone\n");
&& return 0;}-------------------------------------------------------------------这种方式中,int (*a)[10]是一个指向一维数组的一个指针, 而p()也是返回一个指向一维数组的一个指针.===================================================5.返回一个函数指针的指针
/============================================// 在看到快速排序的例子中使用到返回指针的函数.所以特此查找到这篇文章,觉得很好... //============================================/
对这个问题, signal()函数是最好的例子.void (*signal (int signo, void (*func)(int)))(int);很多朋友刚开始看这个函数定义的时候是不太懂, 其实可以一步一步地慢慢看, 我以前是这样分析的, 希望能对大家有用. int (*p)();这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.int (*fun())();这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数,所以说就可以看成是fun()这个函数执行之后,它的返回值是一个函数指针,这个函数指针(其实就是上面的p)所指向的函数是一个不带任何参数,并且返回值为int的一个函数.
所以说signal()可以看成是signal()函数(它自己是带两个参数,一个为整型,一个为函数指针的函数), 而这个signal()函数的返回值也为一个函数指针,这个函数指针指向一个带一个整型参数,并且返回值为void的一个函数.
=================================signal函数返回的其实是指向以前的信号处理程序的指针, 所以举一个例子来说明返回指向函数的指针的用法. 代码如下:#include&signal.h&#include&stdlib.h&#include&stdio.h&
void sig_fun2(int signo){&& printf("in sig_fun2:%d\n", signo);}
void sig_fun1(int signo){&& printf("in sig_fun1:%d\n", signo);}
int main(void){&&&& if (signal(SIGUSR1, sig_fun1) == SIG_ERR) {&&&&& printf("signal fun1 error\n");&&&&& exit(1);&& }
&& (signal(SIGUSR1, sig_fun2))(30);
&& printf("done\n");&& return 0;}====================================================6. 使用函数指针作为参数的情况 (以前的记录提到过.)在函数的参数中, 可能会带有一个函数指针, 这在signal()函数中是出现了的.其实在很多排序函数中就是使用的这个参数为函数指针的方式来进行调用的.比如Quicksort
例如: 代码如下:#include&stdio.h&
int max(int v1, int v2){&& return (v1 & v2 ? v1 : v2);}
int min(int v1, int v2){&& return (v1 & v2 ? v1 : v2);}
int sum(int v1, int v2){&& return (v1 + v2);}
int fun(int a, int b, int (*call)(int, int)){&& return (call(a, b));}
int main(void){&& printf("max=%d\n", fun(1, 2, max));&& printf("min=%d\n", fun(3, 4, min));&& printf("sum=%d\n", fun(5, 6, sum));&& return 0;}
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910当前位置: >
> 探讨C语言中的回调函数回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实
探讨C语言中的回调函数回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实
hfabcd & at
探讨C语言中的回调函数
  回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。回调函数使用是必要的,在我们想通过一个统一接口实现不同的内容,这时用回掉函数非常合适。比如,我们为几个不同的设备分别写了不同的显示函数:void TVshow(); void ComputerShow(); void NoteBookShow()...等等。这是我们想用一个统一的显示函数,我们这时就可以用回掉函数了。void show(void (*ptr)()); 使用时根据所传入的参数不同而调用不同的回调函数。不同的编程语言可能有不同的语法,下面举一个c语言中回调函数的例子, 其中一个回调函数不带参数,另一个回调函数带参数。
  例子1:
  //Test.c
#include &stdlib.h&
#include &stdio.h&
int Test1()
for (i=0; i&30; i++)
printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
int Test2(int num)
for (i=0; i& i++)
printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
void Caller1(void (*ptr)())//指向函数的指针作函数参数
void Caller2(int n, int (*ptr)())//指向函数的指针作函数参数,这里第一个参数是为指向函数的指针服务的,
//不能写成void Caller2(int (*ptr)(int n)),这样的定义语法错误。
(*ptr)(n);
int main()
printf("************************\n");
Caller1(Test1); //相当于调用Test2();
printf("&&&&&&************************\n");
Caller2(30, Test2); //相当于调用Test2(30);
  以上通过将回调函数的地址传给调用者从而实现调用,但是需要注意的是带 参回调函数的用法。要实现回调,必须首先定义函数指针。函数指针的定义这里稍 微提一下。比如: int (*ptr)(); 这里ptr是一个函数指针,其中(*ptr)的括号不能省略,因为 括号的优先级高于星号,那样就成了一个返回类型为整型的函数声明了.
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-C语言模拟试题题库
本试题来自:(2014年C语言模拟试题,)一、选择题以下对C语言函数的有关描述中,正确的是
( )A.在C中,调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B.C函数既可以嵌套定义又可递归调用C.函数必须有返回值,否则不能使用函数D.C程序中有调用关系的所有函数必须放在同一个源程序文件中正确答案:有, 或者
您可能感兴趣的试题
单项选择题:()有以下程序:
#include<stdio.h>
int a=1,b=2,c=3,x;
x=(a^b)&c;printf("%d\n",x);
程序的运行结果是______。
D) 3答案:有,答案解析:有,单项选择题:()以下程序有错,错误原因是(
int *p,i;
char *q,ch;
A) p和q的类型不一致,不能执行*p=*q;语句
B) *p中存放的是地址值,因此不能执行*p=40;语句
C) q没有指向具体的存储单元,所以*q没有实际意义
D) q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行语句*p=*q;没有意义,可能会影响后面语句的执行结果答案:有,答案解析:有,
C语言模拟试题最新试卷
C语言模拟试题热门试卷温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
为兴趣做事,则永不怠倦。学以致用,乐趣无穷。
享受解决问题带来的成就感。
因为懒惰而放弃的将会是你的一生。
LOFTER精选
阅读(1351)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094068',
blogTitle:'U-boot源码学习(二)+ C语言强化',
blogAbstract:'
目的:1,通过看源码,知道如何初始化串口,知道如何让U-boot通过串口显示信息。2,加强c语言基础。内联函数,typedef函数指针的用法,typedef与define的区别,static函数。gcc关键字weak及alias等。
预计学习+写文档时间:3小时。
上次初看了U-boot,知道先从start.S开始执行,那么汇编程序最后又跳到哪个c程序入口点呢?见:ldr&pc, _start_armboot对,去找arch\\arm\\lib中的board.c文件中的start_armboot函数吧!
瞄了一眼,有难度。于是乎,从此文件的首行开始看,因为他都有注释说明功能,而且比较简单。没过多久被下面这段',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'为兴趣做事,则永不怠倦。学以致用,乐趣无穷。\n享受解决问题带来的成就感。\n因为懒惰而放弃的将会是你的一生。',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 c语言函数调用数组 的文章

 

随机推荐