首页 > 试题广场 >

要使指针变量p指向2维数组A的第1个元素,正确的赋值表达式是

[单选题]
要使指针变量p指向2维数组A的第1个元素,正确的赋值表达式是()。
  • p=A或p=A[0]
  • p=A[0]或p=A[0][0]
  • p=A[0]或p=&A[0][0]
  • p=A或p=&A[0][0]
A
A即为数组A的首地址,也就是数组A的第一个元素
A[0]下标引用方式,也就是数组A的第一个元素
发表于 2015-01-18 17:04:00 回复(0)
更多回答
推荐
    int A[10][10];
    int *p;
    
    //p = A;//不能通过编译
    //cout<<p<<","<<*p<<endl;
    p = A[0];
    cout<<p<<","<<*p<<endl;
    //p = A[0][0]; //不能通过编译
    //cout<<p<<","<<*p<<endl;
    p = &A[0][0];
    cout<<p<<","<<*p<<endl;

答案为C



编辑于 2015-07-24 09:25:12 回复(6)
P=A, 是错误的,A代表的是二维数组中,数组A[0]的地址,和元素A[0][0]的地址在 数值上是一样的,但是不能直接把A赋给P,原因是它们的类型不同。
发表于 2015-07-06 10:21:56 回复(3)

(1)p是一个指针,A是一个二级指针,这里表示首元素地址也就是首一维数组的地址,所以p不能等于A
(2)A[0]相当于一维数组,相当于对第一个元素取地址
(3)A[0][0]是首元素的值,p是一个指正,应该为它的地址指向它,故p=&A[0][0]是对的

发表于 2018-02-05 18:34:36 回复(1)
此处应该明白A是一个二级的指针,所以p=A就是一个错误的语句
发表于 2015-10-15 15:30:20 回复(2)
这道题假设A[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};,A是二维数组名,包含3行,即3个行元素,即A[0],A[1],A[2]。而每个行元素又是一个一维数组,包含4个元素。 从二维数组角度来看,A代表二维数组首元素的地址,现在的首元素不是一个简单的整形元素,而是由4个整形元素组成的一维数组,因此A代表是首行(序号为0的行)的首地址。A+1代表序号为1的首地址。A+1指向A[1],A+1的值是A[1]的首地址。 A[0],A[1],A[2]既然是一维数组名,而c语言规定了数组名代表数组首元素地址,因此A[0]代表一维数组A[0]中0第0列元素地址,即&amp;A[0][0]。A[1]代表&amp;A[1][0]等等。 具体详细见谭浩强的C语言,P245~P247。 如果A是二维数组,则A[i]是一维数组名,只是一个地址,并不代表一个元素值。 A是二维数组名,指向一维数组A[0],即0行首地址。 A[0]代表0行0列元素地址。 重新看一下题目,还是C都满足题意要求。因为数组名只代表了0行首地址,并不是第一个元素的地址,尽管数值是一样的,但是意义不同。
编辑于 2017-07-27 20:50:45 回复(1)
数组名在一些情况下会自动退化成指向数组首元素的指针,那么A就退化成int (*)[n]
很显然,因为类型不同,int*无法接受int(*)[n]对象,会报错,所以AD错
指针不能接受一个普通对象,所以B错,答案为C
发表于 2018-08-15 09:50:56 回复(0)
答案:D
1,首先p是一个指针,A表示数组A的首个元素的地址,
   A[0]表示数组A首个元素的值。
   所以p=A[0]或p=A[0][0]都是不正确的,排除法可选D,
2,另一方面,在C语言中,不管是几维数组,在内存中都是顺序存储的线性表,
   A[0],A[0][0],A[0][0][0]...都是表示数组A的第一个元素,
   所以要得到A第一个元素的指针,p=&A[0][0]也是正确的
编辑于 2015-07-24 09:22:47 回复(7)
详细解答:https://blog.csdn.net/Yg201506/article/details/97575517
发表于 2019-07-28 00:15:58 回复(0)
A是二级指针,不能直接赋值给P
发表于 2019-07-26 15:40:01 回复(0)
实记加理解。&为取地址。
发表于 2017-10-30 18:58:22 回复(0)

void main()
{
int A[10][10];
void *p;
p=A[0];
printf("%p\n",A);
printf("%p\n",p);
p=&A[0][0];
printf("%p\n",p);
}
结果如图所示:


发表于 2017-08-24 13:40:12 回复(0)
int a[10][10];
int *p = a[0]; // OK
p = &a[0][0]; // OK
int (*p1)[10];
p1 = a; // OK
编辑于 2017-08-14 09:13:15 回复(0)
#include<stdio.h>
int main()
{
    int i[3][3]={1,2,3,4,5,6,7,8,9};
    printf("%d %d %d %d %d %d ",i,i[0],*i,i[0][0],**i,*i[0]);
    return 0;
}
发表于 2017-05-26 19:32:50 回复(1)
main (){ int A[2][2]={{3,4},{1,2}}; int *p,*p1,*p2,*p3; p = A;//通过 printf("%d %d\n",*p,p); p1=A[0];//通过 printf("%d %d\n",*p1,p1); p2=&A[0][0];//通过 printf("%d %d\n",*p2,p2); p3=A[0][0];//不通过 printf("%d %d\n",*p3,p3); } 解析:二维数组可以看做多个一维数组来处理。 因此,A [2][2]可以看做两个一维数组。 如A[0]数组,有A[0][0] A[0][1]两个元素。 所以A,A[0],&A[0][0]均是首元素的地址。 因为
发表于 2017-04-18 08:59:40 回复(0)
题目中主要没说清楚p是 int *p;还是int **p;
发表于 2016-07-25 15:24:40 回复(0)
二维数组时,A是一个二级指针,是A[0]的地址,虽然在地址上与A[0][0]地址相同,但是类型是不同的。
发表于 2016-05-24 21:26:28 回复(0)

答案错了,应该是C

发表于 2015-07-17 15:50:42 回复(1)
答案 A
排除 BCD,因为不是二维数组。
发表于 2015-01-13 16:56:57 回复(0)
A
p=A,直接将数组A的地址赋值给指针p,p指向的值就是A数组的第一个元素;
p=A[0],p指向数组A的第一个元素
编辑于 2015-06-05 18:25:20 回复(0)