数组的一些问题

在这里插入图片描述
题目解析:
a是一个二维数组,p是一个指针函数,指向有3个int型元素的数组。p = a,a作左值表示a[0]的地址,即&a[0],所以p = a也可以写成p = &a[0]。
答案解析:
A、*(p=2),意思是将2这个地址赋值给指针p,之后解引用p取值,p=2类型不匹配,错。
B、(p+1)+2,意思是指针p+3,指向a[3],数组的第一维只有2,指针p指向了未知空间,错。
C、p[1]+1,p[]是一个一级指针,p[1] = *(p+1)。意思是p先指向下一个,即a[1],解引用是a[1]第一个元素的地址(a[1][0]),+1表示该指针指向a[1][1]的地址空间。对。
D、同C,p[2] = *(p+2),即指向a[2][0]的地址空间,超出数组a的范围。错。

在这里插入图片描述

关于指针和数组的赋值
(1)二位数组

int (*p)[3], a[2][3];
p = &a;    //错的

上面的赋值是错的。p是int (*)[3]类型。而&a代表的是整个二位数组的地址,它的类型应该是int (*p)[2][3]的。改成下面的就对了。

int a[2][3];
int (*p)[2][3] = &a;

(2)一维数组

int a[3], p;
p = a;//对的
p = &a; //错的

a作为左值表示首元素a[0]的地址(&a[0]),它是int类型。
&a作左值表示整个数组的地址,它是int (
)[3]类型。改成下面的就对了

int (*p)[3], a[3];
p = &a;  //对了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值