参考答案和解析
正确答案:
更多“( 8 ) 利用表达式 a[i] 可以访问 int 型数组 a 中下标为 i 的元素 。 在执行了语句 int *p=a; 后 ”相关问题
  • 第1题:

    以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:includefind

    以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空: #include<stdio.h> findmax(int*s,int t,int*k) { int p; for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])________; } main() { int a[10],i,k; for(i=0;i<10;i++)scanf("%d",&a[i]); findmax(a,10,&k); printf("%d,%d\n",k,a[k]); }

    A.k=p

    B.*k=p-s

    C.k=p-s

    D.*k=p


    正确答案:D
    解析:k是—个指针,它的值是—个地址,要通过它为主函数的变量改变数据,必须使用*p,边样就可以把—个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。

  • 第2题:

    程序中有语句:for(inti=0;i<5;i++)cout<<*(p+i)<<",";能够依次输出int型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是( )。

    A.int*p=a;

    B.intp=a;

    C."p=a;

    D.p=a;


    正确答案:A
    A。【解析】从循环语句中可以看出,是在0到4的循环中输出数组a中的前5个元素,输出的值为*(P+i),即为指针P向后移动指向的元素。所以初始化要将指针P指向数组a,即int*p=a;。

  • 第3题:

    假设用下列语句申请了一片动态内存空间,并用指针变量指p向了它,用这片内存保存m×n个int型数据,即作为一个二维动态数组来使用,那么下面通过p访问这个二维动态数组第i行第j列元素的方法中正确的是()。 int *p; p=(int *)malloc(m*n*sizeof(int)); 或 int *p; p=(int *)calloc(m*n,sizeof(int));

    A.*(p+i*n+j)

    B.p+i*n+j

    C.p[j*n+i]

    D.p[i][j]


    C

  • 第4题:

    程序中有如下语句for(int i=0;i<5;i++)cout<<*(p+i)<<",";能够依次输出int型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是( )。

    A.int*p=a;

    B.int p=a;

    C.*p=a;

    D.p=a;


    正确答案:A
    解析: 从循环语句中可以看出,是在0~4的循环中输出数组a中的前,5个元素,输出的值为*(p+i),即为指针p向后移动指向的元素。所以初始化要将指针p指向数组a,即int*P=a;。

  • 第5题:

    现有如下定义语句 int*p,s[20],i;   p=s; 表示数组元素s[i]的表达式不正确的是()

    A.*(s+i)

    B.*(p+i)

    C.*(s=s+i)

    D.*(p=p+i)


    C 解析:当p指向s数组的首地址时,表示数组元素s[i]的表达式应当有:①s[i],②,(s+i),③*(p+i),④p[i]四种形式。选项C)错误的原因是,数组的地址是不可变的,指针的地址是可以变的。