在进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4) 这四个参数通过什么方式从调用程序传入被调函数?

题目

在进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4) 这四个参数通过什么方式从调用程序传入被调函数?


相似考题
更多“在进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4) 这四个参数通过什么方式从调用程序传入被调函数?”相关问题
  • 第1题:

    有以下函数

    void prt(char ch,int n)

    {int i;

    for(i=1,i<=n;i++)

    printf(i%6 !=O?“%c”:“%c\n”,ch);

    }

    执行调用语句prt(’*’,24);后,函数共输出 行*号。


    正确答案:4
    4

  • 第2题:

    写出下列代码的输出内容

    #include

    int inc(int a)

    {

    return(++a);

    }

    int multi(int*a,int*b,int*c)

    {

    return(*c=*a**b);

    }

    typedef int(FUNC1)(int in);

    typedef int(FUNC2)(int*,int*,int*);

    void show(FUNC2 fun,int arg1, int*arg2)

    {

    INCp=&inc;

    int temp =p(arg1);

    fun(&temp,&arg1, arg2);

    printf("%d\n",*arg2);

    }

    main()

    {

    int a;

    show(multi,10,&a);

    return 0;

    }


    正确答案:
    答:110

  • 第3题:

    考虑函数原型void fuc(int x,int y=5,char z='*'),下面函数调用不合法的是( )。

    A.fuc(3);

    B.fuc(3,6);

    C.fuc(3,'*');

    D.fuc(3,6,'*');


    正确答案:C
    解析:在函数调用时,系统按照从左至右的顺序将实参与形参结合,当实参的数量不足时,系统按同样的顺序用说明或定义中的默认值来补齐所缺少的参数。选项C中,实参'*'将赋值给整型形参y,是错误的。

  • 第4题:

    对下列程序的描述正确的是()。include using namespace std;int fuc(int,int);int mai

    对下列程序的描述正确的是( )。 #include <iostream> using namespace std; int fuc(int,int); int main(){ cout<<fuc(1,10)<<endl; return 0; } int fuc(int x,int y){ return x*x+y*y; }

    A.该函数的定义和调用方式都是错误的

    B.该函数的定义和调用方式都是正确的

    C.该函数调用方式正确,但函数定义错误

    D.函数定义正确,但函数调用方式错误


    正确答案:B
    解析:函数定义时要给出函数类型、函数名、函数参数表和函数体。fuc()都做到了,该函数的定义和调用方式都是正确的。

  • 第5题:

    若有以下程序includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){print

    若有以下程序 #include<stdio.h> void f(int n); main() { void f(int n); f(5); } void f(int n) {printf(“%d\n”,n);} 则以下叙述中不正确的是

    A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

    B.若在主函数前对函数f进行说明,则在主函数和其后的其他的其他函数中都可以正确调用函数f

    C.对于以上程序,编译时系统会提示出错信息;提示对f函数重复说明

    D.函数f无返回值,所以可用void将其类型定义为无值型


    正确答案:C
    解析:若一个函数定义在主调函数之后,其返回值不是int或char型,则必须对之进行函数说明。可在函数外说明也可以在函数内说明,在函数外说明,在其后的所有函数均可调用该函数,若在函数内说明,则只能在本函数内调用该函数。函数只能定义一次,但函数说明可以出现多次。

  • 第6题:

    若有以下程序#include <stdio.h>void f(int n);main(){ void f(int n); f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB.若在主函数前对函数f进行说明,则在主函数和其他函数中都可以正确调用函数fC.对于以上程序,编译时系统会提示出错信息:对f函数重复说明D.函数f无返回值,所以,可用void将其类型定义为无返回值型


    正确答案:C
    本题主要考查函数说明的位置及调用。
    函数的说明有时可以缺省,在缺省时,必须先被定义后被调用。函数说明的位置可以是所有函数定义的外部,也可以是某一函数内部,对于后者,函数说明的作用域将被限制在该函数定义内部。函数说明是一条独立的语句,其中<形式参数>部分可以省略。当函数在调用时,如果实参的数据类型与函数说明中对应的形参数据类型不兼容,C语言将不能编译通过。不管函数被说明在哪里,我们需要注意的是:函数在被调用前必须先被说明或定义。
    在本题中,程序首先说明了一个无返回值的函数f,然后在主函数中又说明了这个函数f,接着调用这个函数,虽然函数被重复说明,但其符合先说明后调用的规定。程序执行时,编译系统不报错。
    根据上面的分析我们可以知道,本题四个选项中,描述不正确的是C,虽然函数被重复说明,但编译系统不报错。其他说法都正确。因此本题答案选C。

  • 第7题:

    若有以下调用语句,则不正确的 fun 函数的首部是( )。 void main() { int a[50],n; fun(n,&a[9]); }

    A.void fun(int m,int x[])

    B.void fun(int s,int h[])

    C.void fun(intp,int * s)

    D.void fun(int n,int a)


    正确答案:D
    解析:&a[9]表示对变量a[9]的引用,与它对应的形参必须是表示地址的变量,而D的第2个形参是一个普通变量。

  • 第8题:

    已知C++中一个函数的原型为void f(int &x, int &y),调用这个函数时,要把实在参数传递给形式参数,应该采用的参数传递方式是(30)。

    A.传值调用

    B.引用调用

    C.复制恢复

    D.传名调用


    正确答案:B
    解析:C通过传值方式将实参传递给形参。传值调用是指把实在参数的值传递给相应的形式参数,子程序不能通过这种方式传回任何结果。C++中增加引用调用这种参数传递方式,引用调用是指把实在参数的地址传递给相应的形式参数,此时子程序对形式参数的一次引用或赋值都是对形式参数的间接访问,实际上是对实在参数的一次引用或赋值。如果C++中一个函数的原型为voidf(int&x,int&y),表示调用这个函数时,应该采用引用调用这种参数传递方式。在FORTRAN类的语言中有复制恢复这种参数传递方式,在ALGOL语言中有传名调用这种参数传递方式。

  • 第9题:

    阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。

    【说明】

    在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段C语言代码是驱动管理程序 manage_device调用4个不同设备驱动程序,但没有用到函数指针变量。

    【C语言代码】

    /*变量与类型说明*/

    include "stdio.h"

    include "stdlib.h"

    extern int sys_status;

    extern int Dev_drv1(int arg1, int arg2);

    extern int Dev_drv2(int arg1, int arg2);

    extern int Dev_drv3(int arg1, int arg2);

    extern int Dev_drv4(int arg1, iht arg2);

    define NOERROR 0

    type struct {

    int _fd;

    } TYP_DEV_TAB;

    TYP DEV_TAB dev_tab[50]= {101,99, 80, 120,};

    /*程序代码*/

    void manage_device(int devid, int arg1, int arg2)

    { int place ;

    int ret;

    for(place=0 ; place<50 ; place++)

    if dev_tab [place]. fd == devid) break;

    if(place>=50)

    printf(" NO DEVICE fd = %d\n ",devid);

    switch(dev_tab [place]._fd) {

    case 80:

    ret = Dev_drv3(int arg1,int arg2);

    break;

    case 99:

    ret = Dev_drv2(int arg1,int arg2);

    break;

    case 101:

    ret = Dev_drv1(int arg1,int arg2);

    break;

    case 120:

    ret = Dev_drv4(int arg1,int arg2);

    break;

    }

    if (ret!=NOERROR)

    printf(" DEVICE %d error!\n ", devid);

    }

    int Dev_drv1(int arg1,int arg2)

    {

    /*局部变量声明,略*/

    /*驱动程序代码,略*/

    }

    int Dev_drv2(int arg1,int arg2)

    {

    /*局部变量声明,略*/

    /*驱动程序代码,略*/

    }

    int Dev_drv3(int arg1,int arg2)

    {

    /*局部变量声明,略*/

    /*驱动程序代码,略*/

    }

    int Dev_drv4(int arg1,int arg2)

    {

    /*局部变量声明,略*/

    /*驱动程序代码,略*/

    请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。

    【C语言代码】

    /*变量与类型说明*/

    include "stdio.h"

    include "stdlib.h"

    extern int sys_status;

    extern int Dev_drv1(int arg1, int arg2);

    extern int Dev_drv2(int arg1, iht arg2);

    extern int Dev_drv3(int arg1, int arg2);

    extern int Dev_drv4(int arg1, int arg2);

    define NOERROR 0

    typedef struct {

    int _fd;

    (1) 函数指针变量说明;/* 变量名用process */

    } TYP_DEV_TAB;

    TYP_DEV_TAB dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},

    {80, Dev_drv3},{120, Dev_dry4},};

    /* 程序 */

    void manage_device(int devid, int arg1, int arg2)

    { iht place ;

    int ret;

    (2) 函数指针变量说明;/*局部变量,变量名用ProcAction */

    for(place=0 ; place<50 ; place++) {

    if(dev_tab [place]._fd == devid) {

    (3) 语句1;/* 变量名胜ProcAction, 得到具体函数的入口地址 */

    break;

    }

    }

    if(place>=50)

    printf("NO DEVICE fd = %d\n",devid);

    (4) 语句2;

    if(ret!=NOERROR)

    printf("DEVICE %d error!", devid);

    }


    正确答案:(1)int (*process)(int arg1int arg2); (2)int (*ProcAction)(int arg1int arg2); (3)ProcAction=dev_tab[place].process; (4)ret=ProcAction(arg1arg2);
    (1)int (*process)(int arg1,int arg2); (2)int (*ProcAction)(int arg1,int arg2); (3)ProcAction=dev_tab[place].process; (4)ret=ProcAction(arg1,arg2); 解析:本题考查对C语言中函数指针变量的理解和用法。在C语言中,可以用指针变量指向整型变量、字符串、数组、结构变量,也可以指向一个函数,对指针的用法非常灵活,也很容易出错。其中,函数指针变量为较高级的用法。
    一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
    本题已将使用变量指向函数编写设备驱动程序的大部分给出,只需在对函数指针变量的声明和引用处,只需给出正确的用法即可。

  • 第10题:

    在进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4)这四个参数通过什么方式从调用程序传入被调函数?


    正确答案:根据ATPCS编程规范,调用函数和子程序通过R0-R3四个寄存器传递参数,超过四个参数使用 堆栈传递。因此arg1通过R0传入, arg2通过R1传入,arg3通过R2传入,arg4通过R3传入。

  • 第11题:

    若有以下程序 #include void f(int n) main() { void f(int n); f(5); } void f(int n); { printf("%d/n",n); } 则以下叙述不正确的是()

    • A、若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
    • B、若在主函数前对函数f进行说明,则在主函数和其它函数中都可以正确调用函数f
    • C、对于以上程序,编译时系统会出提示出错信息:提示对f函数重复说明
    • D、函数f无返回值,所以可用void将其类型定义为无值型

    正确答案:C

  • 第12题:

    单选题
    假设函数fun已经定义,其原型为“void fun(int a,int b=7,char*p=“**”);”,下列函数调用中错误的是(  )。
    A

    fun(5)

    B

    fun(5,8)

    C

    fun(6,“##”)

    D

    fun(0,0,“==”)


    正确答案: C
    解析:
    在C++中,可以为形参指定默认值,在函数调用时没有指定与形参相对应的实参时就使用默认值。根据函数fun()的定义,其前两个形参为整型变量,第三个形参为字符型变量,且第二个参数和第三个参数有默认值。在调用时,C项第二个实参的数据类型为字符串,不符合第二个形参的数据类型int,故C项错误。

  • 第13题:

    对下列程序段的描述正确的是( )。 include int fun(int,int); void main(

    对下列程序段的描述正确的是( )。 #include<iostream.h> int fun(int,int); void main() { cout<<fun(1,2)<<endl; } int fun(int x,int y) { return x+y; }

    A.该函数定义正确,但函数调用方式错误

    B.该函数调用方式正确,但函数定义错误

    C.该函数定义和调用方式都正确

    D.该函数定义和调用方式都错误


    正确答案:C
    解析:函数定义的一般形式为:类型标识符函数名(形式参数列表){声明部分;语句}。函数调用的一般格式为:函数名(实参列表)。而“int fun(int,int)”为函数声明,是可以不写形参名,只写形参的类型。所以,可以看出函数fun的定义和调用都是正确的。

  • 第14题:

    若有以下程序:includevoid f(int n);main(){void f(int n); f(5);}void f(int n){prin

    若有以下程序: #include<stdio.h> void f(int n); main() { void f(int n); f(5); } void f(int n) { printf("%d\n",n);}则以下叙述中不正确的是( )。

    A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

    B.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数f

    C.对于以上程序,编译时系统会提示出错信息:对f函数重复说明

    D.函数f无返回值,所以可用void将其类型定义为无返回值型


    正确答案:C
    解析:f函数没有重复说明,在main函数中是对f函数声明,在main函数外则是对f函数的定义。

  • 第15题:

    若有以下程序#include <stdio.h>void f(int n);main(){ void f(int n); f(5);}void f(int n){ printf("%d\n",n);}则以下叙述中不正确的是A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数fC.对于以上程序,编译时系统会提示出错信息:对f函数重复说明D.函数f无返回值,所以,可用void将其类型定义为无返回值型


    正确答案:C
    C语言规定,一个函数中调用另一个函数(即被调用函数)需要具备的条件有:
    ① 被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。
    ② 如果使用库函数,一般还应该在本文件开头用#include命令将函数调用有关库函数时所需要的信息“包含”到本文件中。
    ③ 如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明,即向编译系统声明将要调用此函数,并将有关信息通知编译系统。
    在本题中,选项C是不正确的,从程序中我们可以看出,首先在主函数前面声明了函数f,按照函数调用的规则,主函数可以调用该函数了,但在主函数中又重复声明了该函数,其声明的形式完全一样,虽然重复了操作,但编译时系统不会报错,仍属于合理操作。

  • 第16题:

    若有以下程序includevoidf(intn);main() (voidf(intn); f(5); }void f(intn) {printf(

    若有以下程序 #include <stdio.h> void f(int n); main() ( void f(int n); f(5); } void f(int n) { printf("%d\n",n); } 则以下叙述中不正确的是

    A.若只在主函数中对函数f进行说明,则只能在土函数中正确调用函数f

    B.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正碗调用函数f

    C.对于以上程序,编译时系统会提示出错信息:提示对f函数重复况明

    D.函数f无返回值,所以可用void将其类型定义为无值型


    正确答案:C
    解析:本题考核的知识点是函数说明的方法。若一个函数定义在主调函数之后,其返回值不是int或char型,则必须对之进行函数说明。可在函数外说明也可以在函数内说明,在函数外说明,在其后的所有函数均可调用该函数,若在函数内说明,则只能在本函数内调用该函数。函数只能定义一次,但函数说明可以出现多次,因此选项C是错误的。所以,4个选项中C为所选。

  • 第17题:

    调用函数bbb后,输出是什么

    void ccc(int x)

    {

    char szTemp[10] = "";

    x = 2;

    sprintf(szTemp, "%d,", x);

    afxDump << szTemp;

    if(x = 3)

    {

    int x = 4;

    sprintf(szTemp, "%d,", x);

    afxDump << szTemp;

    }

    sprintf(szTemp, "%d,", x);

    afxDump << szTemp;

    }

    void bbb()

    {

    char szTemp[10] = "";

    int x = 7;

    ccc(x);

    sprintf(szTemp, "%d,", x);

    afxDump << szTemp;

    }


    正确答案:
     

  • 第18题:

    在下面的函数声明中,______ 是“void BC (int a,int b);”的重载函数。

    A.int BC (int a,int b)

    B.void BC(int a,char b)

    C.float BC (int a,int b,int c=0)

    D.void BC (int a,int b=0)


    正确答案:D
    解析:如果重载函数voidBC(inta,intb),则参数个数和返回值等都要与其相同。

  • 第19题:

    若有以下程序段: void x(int n); void main() { void x(int n); x(5); } void x(int n){ cout<<n: } 则以下叙述不正确的是 ______。

    A.若只在子函数中对函数x进行声明,则只能在主数中正确调用函数x

    B.若只在子函数前面对函数x进行声明,则其后的所有函数中都可以正确调用函数x

    C.对于以上程序,编译时系统会提示出错信息:提示对x函数重复声明

    D.函数x无返回值,所以可用void定义x的函数类型


    正确答案:C

  • 第20题:

    对下列程序的描述中,正确的是()。includeusing namespace std;int Fun(int,int);int m

    对下列程序的描述中,正确的是( )。 #include<iostream> using namespace std; int Fun(int,int); int main() { cout<<Fun(5,50)<<end1; return 0; } int Fun(int x,int y) { return x*x+y*y; }

    A.该函数定义正确,但函数调用方式错误

    B.该函数调用方式正确,但函数定义错误

    C.该函数的定义和调用方式都是正确的

    D.该函数的定义和调用方式都是错误的


    正确答案:C
    解析:函数定义时要给出函数类型、函数名、函数参数表和函数体。本程序的Fun()都做到了,所以此函数的定义也是正确的。该函数的定义和调用方式都是正确的。

  • 第21题:

    (9)有以下函数

    void prt(char ch,int n)

    { int i;

    for(i=1;i<=n;i++)

    printf(i%6!=0?"%c":"%c\n",ch);

    }

    执行调用语句prt('*',24);后,函数共输出了 【9】 行*号。


    正确答案:
    (9)4

  • 第22题:

    下面的函数声明中,()是“void BC(int a, int b);”的重载函数

    • A、 int BC(int x, int y);
    • B、 void BC(int a, char b);
    • C、 float AA(int a, char b);
    • D、 int BC(int a, int b=0);

    正确答案:B

  • 第23题:

    问答题
    在进行基于ARM核的嵌入式系统软件开发时,调用如下函数: int do_something(int arg1,void *arg2,char arg3,int *arg4) 这四个参数通过什么方式从调用程序传入被调函数?

    正确答案: 根据ATPCS编程规范,调用函数和子程序通过R0——R3四个寄存器传递参数,超过四个参数使用堆栈传递。因此arg1通过R0传入,arg2,通过R1传入,arg3通过R2传入,arg4通过R3传入。
    解析: 暂无解析

  • 第24题:

    单选题
    下面的函数声明中,()是“void BC(int a, int b);”的重载函数
    A

     int BC(int x, int y);

    B

     void BC(int a, char b);

    C

     float AA(int a, char b);

    D

     int BC(int a, int b=0);


    正确答案: D
    解析: 暂无解析