首页 > 试题广场 >

下面程序的输出结果是?

[单选题]
下面程序的输出结果是?
#include<iostream.h>
int main(){
    int n[][3]={10,20,30,40,50,60};
    int (*p)[3];
    p=n;
    cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
    return 0;
}
  • 10,30,60
  • 10,30,50
  • 10,20,30
  • 20,40,60
p[0][0]指的是第一个元素;
p[0]+1指的是第一行第二个元素;
(*p)[2]数组指针,表示第一行的第三个元素;
**(p+1)表示第二行第一个元素;
编辑于 2015-10-16 21:47:17 回复(7)
一维数组:
    a <=> &a[0]        a+1 <=> &a[1]
    *a <=> a[0]         *(a+1) <=> a[1]
二维数组:
     a[0] <=>&a[0][0]    a[1] <=> &a[1][0]      a[1]+1 <=> &a[1][1]
    *a[0] <=>a[0][0]     *a[1] <=> a[1][0]       *(a[1]+1 ) <=> a[1][1]

发表于 2015-09-12 09:31:47 回复(4)
1、p[0][0]好理解,相当于n[0][0]
2、*(p[0] + 1):分两步理解(1)p[0] + 1,由于p是一个指针数组p[0]相当于n[0](是个地址),然后加1,指向n[0][1],(2)* 取内容,故*(p[0]+1)意思是取p[0]+1地址的内容,即是n[0][1]
3、(*p)[2],我是这样理解的,首先p是一个二级指针,p[0]指向n的第一行,p[1]指向n的第二行;然后*p得到的是n的第一行的首地址,一个地址相当于一个一级指针,和[2]结合,就相当于n[0][2]了


发表于 2015-09-16 10:47:30 回复(2)
int (*p)[3];  //声明一个指针p,指向一个可以容纳三个int值的数组
int *p[3];  //声明一个指针数组p,该数组可以容纳3个指向int值的指针

发表于 2017-08-01 19:14:39 回复(0)
这里主要考核了数组指针的使用,其实就是行指针
数组指针:int (*p)[n],()的优先级高,p是一个指针,指向一个int型的一维数组,内含n个元素
当执行p++的后会跳过整个一行
  int (*p)[3];   ///数组指针,指向一个一维数组,含有3个元素
    int a[][3] = {10,20,30,40,50,60};
    p = a;  ///将a数组的首地址赋给p

    cout<<"*p[0]"<<"---------"<<*p[0]<<endl;    //10
    cout<<"p[0][0]"<<"---------"<<p[0][0]<<endl;//10
    cout<<"p[0][1]"<<"---------"<<p[0][1]<<endl;//20
    cout<<"p[0][2]"<<"---------"<<p[0][2]<<endl;//30
    cout<<"============================"<<endl;
    cout<<"*p[1]"<<"---------"<<*p[1]<<endl;        //40
    cout<<"p[1][0]"<<"---------"<<p[1][0]<<endl;    //40
    cout<<"p[1][1]"<<"---------"<<p[1][1]<<endl;    //50
    cout<<"p[1][2]"<<"---------"<<p[1][2]<<endl;    //60
    cout<<"============================"<<endl;

    cout<<"*(p[0]+1)"<<"---------"<<*(p[0]+1)<<endl; //20
    cout<<"(*p)[2]"<<"---------"<<(*p)[2]<<endl;    //初始时p在第1行,即a[0][2] = 30 
    p++;
    cout<<"执行p++后的(*p)[2]变为"<<"---------"<<(*p)[2]<<endl; //执行p++的后会跳过整个一行到a[1][2] = 60

发表于 2018-09-01 15:30:43 回复(0)
这个等价要记牢
一维数组:
    a <=> &a[0]        a+1 <=> &a[1]
    *a <=> a[0]         *(a+1) <=> a[1]
二维数组:
     a[0] <=>&a[0][0]    a[1] <=> &a[1][0]      a[1]+1 <=> &a[1][1]
    *a[0] <=>a[0][0]     *a[1] <=> a[1][0]       *(a[1]+1 ) <=> a[1][1]
发表于 2018-02-25 00:35:29 回复(1)
p[0][0]指的是第一个元素;
p[0]+1指的是第一行第二个元素;
(*p)[2]数组指针,表示第一行的第三个元素;
**(p+1)表示第二行第一个元素;
发表于 2016-09-16 15:38:25 回复(0)
*p=p[0] 第三个(*p)[2]=p[0][2]     
发表于 2015-09-12 11:04:23 回复(0)
int(*p)[3];
表示数组指针(3列)
p=n即p指向数组n
则p[0][0]=10
*p  和  p[0]表示第一行的指针
*p+1和p[1]表示第二行的指针


发表于 2020-03-13 18:47:39 回复(0)
画个2行3列的数组就解决了
发表于 2019-02-03 10:20:12 回复(0)
a[3]声明的是一维数组,则(*p)[3]也是一维数组,只不过p为指向二维数组的指针,p=n,则:
p[0][0] = n[0][0] = 10
*(p[0]+1) = n[0][1] = 20
(*p)[2] = *(*(p+0)+2) = n[0][2] = 30
故选C
发表于 2016-01-30 20:49:11 回复(0)
数组:
   0   1   2 
0  10  20  30
1  40  50  60
p=n;---p和指向同一二维数组
一级地址指向行的首地址:p[0] 相当与 p[] = {10,20,30},p[1] 相当于 p[] = {40,50,60}
所以p[0][0] = 10;
p[0]+1 = 20;
(*p)[2] = 30;
发表于 2016-01-30 05:00:31 回复(0)
对于二维数组p:
p[0][0]指的是第一个元素,p[0]+1指的是第一行第二个元素(相当于p[0][1]);
(*p)[0]数组指针(相当于**(p),表示第一行第一个元素。
发表于 2023-07-09 15:04:30 回复(0)
这个题有问题吧,连一个数组指针和指针数组都分不清,还来出题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

发表于 2023-10-25 16:43:35 回复(0)
求问    *(p+1)  和 **(p+1)的区别????
发表于 2021-04-14 09:22:37 回复(0)
c++数组
发表于 2020-10-09 17:58:58 回复(0)
(*p)[3]为数组指针; 
p = n;
我理解为p指向二维数组第一行元素;
p[0][0]为二维数组第一个元素;
p[0]+1为二维数组第一行第二个元素的地址;
(*p)[2]为二维数组第一行第三个元素;
**(p+1) 首先()优先级大于* 先看p+1,p+1指向二维数组第二行,*(p+1)为第一列第二个元素的地址,等同(p+1)[0];
**(p+1) 即为二维数组第二行第一个元素;
以上是我的理解,初学小白 欢迎指正!
发表于 2019-10-25 10:53:59 回复(0)
p是一个二级指针,*p = *(p+0) = p[0],  p[0]就是一级指针了。
发表于 2019-08-04 15:32:05 回复(0)
一维数组:     a <=> &a[0]        a+1 <=> &a[1]     *a <=> a[0]         *(a+1) <=> a[1] 二维数组:      a[0] <=>&a[0][0]    a[1] <=> &a[1][0]      a[1]+1 <=> &a[1][1]     *a[0] <=>a[0][0]     *a[1] <=> a[1][0]       *(a[1]+1 ) <=> a[1][1]
发表于 2019-06-26 18:28:15 回复(0)
p[0][0]指的是第一个元素; p[0]+1指的是第一行第二个元素; (*p)[2]数组指针,表示第一行的第三个元素; **(p+1)表示第二行第一个元素;
发表于 2018-08-23 18:37:50 回复(0)