单选题有以下程序:#include void f(int *p);main(){ int a[5]={1,2,3,4,5},*r=a; f(r); printf("%d",*r);}void f(int *p){ p=p+3; printf("%d,",*p);}程序运行后的输出结果是(  )。A 1,4B 4,4C 3,1D 4,1

题目
单选题
有以下程序:#include void f(int *p);main(){ int a[5]={1,2,3,4,5},*r=a; f(r); printf("%d",*r);}void f(int *p){ p=p+3; printf("%d,",*p);}程序运行后的输出结果是(  )。
A

1,4

B

4,4

C

3,1

D

4,1


相似考题
更多“单选题有以下程序:#include void f(int *p);main(){ int a[5]={1,2,3,4,5},*r=a; f(r); printf("%d",*r);}void f(int *p){ p=p+3; printf("%d,",*p);}程序运行后的输出结果是(  )。A 1,4B 4,4C 3,1D 4,1”相关问题
  • 第1题:

    下述程序的输出结果是()。includevoid main(){int a[5]={1,2,3,4,5};int *p=a,**q=&p;p

    下述程序的输出结果是( )。 #include<stdio.h> void main() {int a[5]={1,2,3,4,5}; int *p=a,**q=&p; printf("%d,",*(p++)); printf("%d",**q);}

    A.2,2

    B.1,1

    C.3,4

    D.1,2


    正确答案:D
    解析:题干中,*(p++)就是数组元素a[0],输出a[0],之后指针p的值加1,**q即是数组元素a[1]。

  • 第2题:

    有以下程序

    #include<stdio.h>

    void f(int*p);

    main( )

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

    f(r);printf(”%d\n”,*r);

    }

    void f(int *P)

    {p=p+3;printf(”%d,”,*p);}

    程序运行后的输出结果是( )。

    A.1,4

    B.4,4

    C.3,1

    D.4,1


    正确答案:D
    解析:本题考查参数的按值传递。调用f(r),函数创建一个整型指针p,然后将r的值传给p,即p也指向a,p=p+3,输出p所指变量的值,即数组右移3位,即a[0+3]的值4,然后,函数结束,指针p被销毁,r中的值不变还指向a[0],所以输出为4,1。

  • 第3题:

    有以下程序 int *f(znt *x,int *y) { if(*x<*y) return X; else return y; } main() { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf("%d,%d.%d\n",*p,*q,*r); } 执行后输出结果是

    A.7,8,8

    B.7,8,7

    C.8,7,7

    D.8,7,8


    正确答案:B
    解析:本题定义了一个返回值为指针的函数f(),此函数有两个指针型的形参x和y)该函数的功能,是返回x和y指向的变量中值较小的那个指针变量。主函数中定义了两个指针变量p和小并让它们指向了变量a和b,调用函数f(),返回指向的变量值较小的指针变量,r的值为指针变量p的值(变量a的地址),因此最后输出的*p、*q和,r的值是7,8和7。所以,B选项为所选。

  • 第4题:

    有以下程序: int *f(int *x,int *y) {if(*x<*y)return x; else return y; } main() { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } 程序运行后输出结果是______。

    A.7,8,8

    B.7,8,7

    C.8,7,7

    D.8,7,8


    正确答案:B
    解析:f函数的功能是返回地址为x,y的两个数中值铰的数的地址,本题输出结果是7,8,7。

  • 第5题:

    有以下程序includevoid f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r, &n

    有以下程序 #include<stdio.h> void f(int *p,int *q); main() { int m=1,n=2,*r=&m; f(r, &n); printf("%d,%d",m,n); } void f(int*p,int*q) {p=p+1; *q=*q+1;) 程序运行后的输出结果是______。

    A.1,3

    B.2,3

    C.1,4

    D.1,2


    正确答案:A
    解析:本题主要考查函数实参和形参之间的传递,C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只能由实参传绐形参,而不能由形参传回来给实参。f(r&n)把n的地址传递给q,通过地址传递的函数可以有返回值,因此,n的值为q的返回值3,又因为p是形参变量没有返回值,所以m的值没有改变,因此,选项A是正确的。

  • 第6题:

    有以下程序 #include<stdio.h> void fun(int p) {int d=2; p=d++;printf("%d".p);} main( ) {int a=1; fun(a):printf("%d\n",a);) 程序运行后的输出结果是( )。

    A.32

    B.12

    C.21

    D.22


    正确答案:C
    本题考查函数调用。主函数中调用fun函数,p=d++,d=2,选取d的值,再加1,所以输出P的值为2,再回到主函数中,直接输出a的值为1。

  • 第7题:

    以下程序的输出结果是include "stdio.h"int *f(int *x,int *y){ if(*x<*y) return x; else return y;}main(){ int a=7,b=8, *p,*q,*r ; p=&a; q=&b; r= f(p,q); printf("%d,%d,%d\n",*p,*q,*r);}


    正确答案:7,8,7。
    在本题中,程序首先定义了一个函数f,其结构是int *f(int *x,int *y),这个结构说明函数f的返回类型是指针型,函数f的两个变量分别是指针变量x和y,从程序中我们很容易看出,这个函数的作用是返回形参中值较小的指针值(即地址值),返回的是指针型的结果。
    在主函数中,首先定义了两个整型变量,分别赋初值7和8,并定义了三个指针型变量,接着将指针变量p和q分别指向变量a和b,然后调用函数f,参数分别为指针变量p和q,很显然,p所指向的值小于q所指向的值,那么返回指针变量p的地址值给指针变量r,由于指针变量P的地址值是变量a存储单元的地址值,也就是说,指针变量r指向变量a,因此,最后程序的输出结果是7,8,7。

  • 第8题:

    有以下程序:include define P 3void F(int x) {return(P* x* x); tmain( ){printf("

    有以下程序:#include <stdio.h>#define P 3void F(int x) { return(P* x* x); tmain( ){ printf(" % d \n" ,F(3 + 5) ); }程序运行后的输出结果是( )。

    A.192

    B.29

    C.25

    D.编译出错


    正确答案:D
    解析:return语句用于从被调函数带回一个函数值。void关键字表示“无类型”,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

  • 第9题:

    有以下程序: #include<stdio.h> void f(int*p); main {int a[5]={1,2,3,4,5),*r=a; f(r);printf("%d\n",*r); } void f(int*p) {p=p+3;printf("%d,",*p);} 程序运行后的输出结果是( )。

    A.1,4

    B.4,4

    C.3,1

    D.4,1


    正确答案:D
    本题考查参数的按值传递。调用f(r),函数创建一个整型指针P,然后将r的值传给P,即P也指向a,p=p+3,输出P所指变量的值,即数组右移3位,即a[O+3]的值4,然后,函数结束,指针P被销毁,r中的值不变,还指向a[0],所以输出为4,1。

  • 第10题:

    单选题
    有以下程序:#include #include void fun(int **s, int x[2][3]){ **s =*(x[1]+1);}void main(){ int a[2][3]={1,2,3,4,5,6},*p; p = (int *)malloc(sizeof(int)); fun(&p,a); printf("%d",*p);}程序的运行结果是(  )。
    A

    5

    B

    2

    C

    6

    D

    3


    正确答案: D
    解析:
    malloc()函数的返回值是新分配的存储区的首地址,将该地址赋值给p指针,然后取p指针的地址,调用fun函数。fun函数中对指向指针的指针s指向的内存单元赋值,其中x[1]表示二维数组x的第二行的行地址,x[1]+1表示二维数组x的第二行第二列的地址,所以fun函数的功能是将二维数组x的第二行第二列的值,即x[1][1]赋值给**s,*s为p,所以**s代表*p,*p即为a[1][1],答案选择A选项。

  • 第11题:

    单选题
    有以下程序:#includeint k = 5;void f( int *s){ s = &k;}main(){ int m=3, *p=&m; f(p); printf(%d,%d,m,*p);} 程序的运行结果是(  )。
    A

    3,3

    B

    5,5

    C

    3,5

    D

    5,3


    正确答案: B
    解析:
    考查函数传参。C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向。结果不变,答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include int *f(int *s,int *t){ if(*s < *t)*s=*t; return s;}main(){  int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf("%d,%d,%d,%d,%d",i,j,*p,*q,*r);}程序的运行结果是(  )。
    A

    5,5,5,5,5

    B

    3,5,5,5,5

    C

    5,3,3,3,5

    D

    3,5,3,5,5


    正确答案: A
    解析:
    程序执行过程为:p指向i的地址,q指向j的地址,调用函数f,比较p指向地址存储的元素值3与q指向地址存储的元素值5的大小,if语句成立时将q指向地址存储的元素值5赋给p指向地址存储的元素,即此时p指向地址存储的元素值i=5,返回值指针r指向i,最后输出5,5,5,5,5,答案选择A选项。

  • 第13题:

    有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else return y; } main( ) { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } 执行后输出结果是

    A.7,8,8

    B.7,8,7

    C.8,7,7

    D.8,7,8


    正确答案:B
    解析:函数f()的功能是返回两者中的较大数,且这两个数本身不会改变。

  • 第14题:

    下列程序的输出结果是()。includevoid p(int *x){printf("%d",++*x);}void main(){int

    下列程序的输出结果是( )。 #include<stdio.h> void p(int *x) { printf("%d",++*x); } void main() { int y=3; p(&y); }

    A.3

    B.4

    C.2

    D.5


    正确答案:B
    解析:本题考查函数调用时的参数传递。在函数调用时,形参是指向实参的指针变量,则printf的执行结果为3+1=4。

  • 第15题:

    下面的程序输出结果是 ______。 #define r 16 #if r==16 void p(int a) { printf("%x",a) ; } #else void p(int a) { printf("%d",a) ; } #endif main() { p(32); }

    A.32

    B.20

    C.编译时错误

    D.运行时错误


    正确答案:B
    解析:“#definer16”的作用是指定用标识符r来代替16,因此程序编译时只编译#if部分,故程序运行时,打印输出十六进制的32,即20。

  • 第16题:

    有以下程序 include void fun(int*a,int*B) { int*c; c=a;a=b;b=c; } main() {int x=3

    有以下程序 #include<stdio.h> void fun(int*a,int*B) { int*c; c=a;a=b;b=c; } main() { int x=3, y=5,*p=&x, *q=&y; fun(p,q); printf("%d,%d,",*p,*q); fun(&x,&y); printf(" %d,%d\n",*p,*q); } 程序运行后的输出结果是______。

    A.3,5,5,3

    B.3,5,3,5

    C.5,3,3,5

    D.5,3,5,3


    正确答案:B
    解析:本题主要考查的是函数的实参和形参之间的传递关系,C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。调用函数不可能改变实参指针变量的值。所以x和y的地址并没有改变,即p和q也没有改变,因此,选项B是正确的。

  • 第17题:

    有以下程序include<stdio.h>int*f(int*p,int*q);main( ){int m=1,n=2,*r=&m;r=f(r,&am

    有以下程序

    include<stdio.h>

    int*f(int*p,int*q);

    main( )

    {int m=1,n=2,*r=&m;

    r=f(r,&n);printf(”%d\n”,*r);

    }

    int-f(int*P,int*q)

    (return(*p>*q)?p:q;)

    程序运行后的输出结果是______。


    正确答案:2
    2 解析:函数f的返回值的类型是int*,作用是返回两个int*型指针所指变量中值大的那个指针的。本题中定义了一个int*型指针r并置初值&m,即指针r指向m。r=f(r,&n),由于m的值小于n值,所以f函数返回值为&n,所以输出为2,即n值。

  • 第18题:

    有以下程序: #define P3 void F(int x){return(P*x*x);} main() {printf("%d\n",F(3+5));} 程序运行后的输出结果是 ______。

    A.192

    B.29

    C.25

    D.编译出错


    正确答案:D
    解析:return语句用于从被调函数带回一个函数值。void关键字表示“无类型”,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

  • 第19题:

    有下列程序: #include<stdi0.h> voidf(int*P,int*q); voidmain( ) (intm=1,n=2,*r=&m; f(r,&n);printf("%d,%d",m,n); } voidf(int*P,int*q)

    {p=p+1;*q=*q+1;} 程序运行后的输出结果是( )。

    A.1,3

    B.2,3

    C.1,4

    D.1,2


    正确答案:A
    A。【解析】本题中子函数f(int*p,*q)的功能是对指针p的值加1,*q的值加1。主函数中调用子函数f(r,&n)时,子函数的执行结果是r值加1,n的值加1。而m的值并没有发生变化,最后程序输出的结果为1,3。所以正确答案为选项A。

  • 第20题:

    下列程序的输出结果是()。 include void main() {int b[6]-<2,4,6,8,10,12}; int*p=b,*

    下列程序的输出结果是( )。

    #include<stdio.h>

    void main()

    { int b[6]-<2,4,6,8,10,12};

    int*p=b,**q=&p;

    printf("%d",*(p++));

    printf("%d,",**q);

    }

    A.4,4

    B.2,2

    C.4,5

    D.2,4


    正确答案:D
    解析:首先定义了一个指向一维数组b的指针p,一个指向指针p的指针变量q,输出*(p++)是先输出*p即 b[0]的值,再将指针p指向数组的下一个元素b[1],输出 **q是输出指针p所指单元的内容,即b[1]的值。

  • 第21题:

    以下程序的输出结果是( )。 include void swap(int*a,int*B){int*t; t=a;a=b;b=c;} main

    以下程序的输出结果是( )。 include<stdio.h> void swap(int*a,int*B){int*t; t=a;a=b;b=c;} main() {int i=3,j=5,*p=&i,*q=&j; swap(p,q);printf("%d %d\n",*p,*q); }


    正确答案:3 5
    3 5 解析:本题考查函数中形参和实参的传递。在C语言函数中实参和形参传递具有不可逆性,参数只能由实参传向形参,而不能由形参传向实参,虽然swap函数的功能是实现两个数的交换,但由于没有返回值,故最终的输出结果为3 5。

  • 第22题:

    单选题
    有以下程序:#include void f(int *p);main(){ int a[5]={1,2,3,4,5},*r=a; f(r); printf("%d",*r);}void f(int *p){ p=p+3; printf("%d,",*p);}程序运行后的输出结果是(  )。
    A

    1,4

    B

    4,4

    C

    3,1

    D

    4,1


    正确答案: B
    解析:
    在调用f函数时,形参p通过传递参数指向了数组a的起始地址,执行语句“p=p+3;”后指向了a[3]的地址,所以输出4;主函数中,指针r仍指向数组a的首地址,所以输出1。答案选择D选项。

  • 第23题:

    单选题
    有以下程序#include typedef struct{ int b,p;}A;void f(A c){ int j; c.b+=1; c.p+=2;}main(){ int i; A a={1,2}; f(a); printf(%d,%d,a.b,a.p);}程序运行后的输出结果是(  )。
    A

    1,2

    B

    2,4

    C

    1,4

    D

    2,3


    正确答案: D
    解析:
    当把一个结构体变量传送给相应的形参时,传递的是实参结构体变量中的值,系统将为结构体类型形参开辟相应的存储单元,并将实参中各成员的值一一对应赋给形参中的成员,函数中形参结构体变量的改变不会影响到实参结构体变量。所以,函数f不会改变a中的数据。答案选择A选项。

  • 第24题:

    单选题
    有以下程序:#include void f(int*p,int*q);main(){ int m=1,n=2,*r=&m; f(r,&n); printf("%d,%d",m,n);}void f(int*p,int*q){ p=p+1; *q=*q+1;}程序运行后的输出结果是(  )。
    A

    1,3

    B

    2,3

    C

    1,4

    D

    1,2


    正确答案: D
    解析:
    语句p=p+1;只改变指针p的地址,与p的内容无关,所以m值没有改变,而语句*q=*q+1;是改变该指针所指地址中的内容,所以n变为3,m不变,仍为1,答案选择A选项。