有以下程序 void f(int *q) { int i=0; for(;i<5;i++) (*q)++; } main() { int a[5]={1,2,3,4,5},i; f(a); for(i=0;i<5;i++)printf("%d,",a[i]); } 程序运行后的输出结果是A.2,2,3,4,5,B.6,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,

题目

有以下程序 void f(int *q) { int i=0; for(;i<5;i++) (*q)++; } main() { int a[5]={1,2,3,4,5},i; f(a); for(i=0;i<5;i++)printf("%d,",a[i]); } 程序运行后的输出结果是

A.2,2,3,4,5,

B.6,2,3,4,5,

C.1,2,3,4,5,

D.2,3,4,5,6,


相似考题
参考答案和解析
正确答案:B
解析:调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a [0]的值增加了5。最后的输出结果为“6,2,3,4,5”。
更多“有以下程序 void f(int *q) { int i=0; for(;i<5;i++) (*q)++; } main() ”相关问题
  • 第1题:

    有以下程序 void f(int *x,int *y) { int t; t=*X; *X=*y; *y=t; } main() { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a; q=&a[7); while(p>q) { f(p,q); p++; q--; } for(i=0; i<8; i++) printf("%d,",a[i]); } 程序运行后的输出结果是

    A.8,2,3,4,5,6,7,1,

    B.5,6,7,8,1,2,3,4,

    C.1,2,3,4,5,6,7,8,

    D.8,7,6,5,4,3,2,1,


    正确答案:D
    解析:在C语言中,函数参数的默认传递方式是传值,即函数内部的形参只是调用时的实参的一个拷贝,改变形参,实参不会被改变.如果想要实现传址调用只能使用传递指针的方式来实现.利用指针作函数的参数时,无论形参指针还是实参指针所指的都是同一个内存地址,所以形参如果改变了这个地址中的内容,也就是改变了实参所指的地址内容.本题程序开头定义了一个函数f(),在函数中用一个临时变量t交换了两个指针参数所指的地址内容,所以该函数的作用就是交换两个参数所指的内容。在主函数中,首先定义了一个int型数组a,并定义了两个int型指针p、q分别指向数组a的第一个元素和最后一个元素。然后使用一个while循环调用函数f()不断交换两个指针所指的内容,每次交换后p往后移动一个元素,q往前移动一个元素,直到q不再大于p,即直到两个指针在数组a的中间相遇为止。所以,程序最终运行的结果是数组a中的所有元素全被反序排列一次。故应该选择选项D。

  • 第2题:

    有以下程序

    void f(int *q)

    {int i=0;

    for(;i<5; i++) (*q)++;

    }

    main()

    {int a[5] ={1,2,3,4,5}, i;

    f(a);

    for(i=0;i<5; i++) printf("%d,", a[i]);

    }

    程序运行后的输出结果是

    A.2,2,3,4,5,

    B.6,2,3,4,5,

    C.1,2,3,4,5,

    D.2,3,4,5,6,


    正确答案:B
    解析:调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结果为"6,2,3,4,5"。

  • 第3题:

    有以下程序:include void f(int * x,int * y) int t;t= *x; *x= *y; *y=t;main ( ){in

    有以下程序:#include <stdio.h>void f(int * x,int * y) int t; t= *x; *x= *y; *y=t;main ( ){ int a[8] = { 1,2,3,4,5,6,7,8} ,i, * p, * q; p=a;q =&a[7]; while(p<q) { f(p,q) ;p ++ ;q --; } for(i =0;i<8;i ++ ) printf(" % d," ,a[i]); }程序运行后的输出结果是( )。

    A.8,2,3,4.,5,6,7,1,

    B.5,6,7,8,1,2,3,4,

    C.1,2,3,4,5,6,7,8,

    D.8,7,6,5,4,3,2,1,


    正确答案:D
    解析:程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。在main函数中,通过P=a;q=&a[7];指针变量p指向数组的第一个元素,指针变量q指向数组的最后一个元素。通过调用函数f(p,q)进行前后对称位置上的数组元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为8,7,6,5,4,3,2,1,所以程序输出的结果为:8,7,6,5,4,3,2,1,

  • 第4题:

    有以下程序

    void f(int *q)

    { int i=0;

    for(;i<5;i++) (*q)++;

    }

    main( )

    { int a[5]={1,2,3,4,5},i;

    f(a);

    for(i=0;i<5;i++) printf("%d,",a[i]);

    }

    程序运行后的输出结果是

    A.2,2,3,4,5,

    B.6,2,3,4,5,

    C.1,2,3,4,5,

    D.2,3,4,5,6,


    正确答案:B
    解析:调用函数f( )时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结果为“6,2,3,4,5”。

  • 第5题:

    若有以下程序: void g(int **q) { (**q) ++; (*q) ++; } void main() { int line [5]; int *p=line; for (i=0; i<5; i++) { *p=i; g(&P); } for (i=0; i<5; i++) cout<<line[i]; cout<<end1; } 该程序运行后的输出结果为( )。

    A.12345

    B.1234

    C.11111

    D.55555


    正确答案:A
    解析:本题考核指针的运用。主函数的for循环中向函数g()传入实参&p,则在函数g()中执行“(**q)++;”相当于执行“(**(&p))++”,即(*p)++,其结果就是对相应的数组元素值加1。函数g()中执行“(*q)++;”相当于执行“(*(&p))++”,即p++。其结果为指针p指向下一个数组元素。这样通过for循环给数组元素分别赋值1、2、3、4、5。