c语言指针
若有以下定义和语句,则对a数组元素地址正确引用的是()A.*(p+2) B.p c.p+1 D(p+1)+2
答案选C,但是这是怎么个运算方法???求解,谢谢啦 信息不全啊,变量定义呢? 若有以下定义和语句,则对a数组元素地址正确引用的是()
int a,(*p);
p=a;
A.*(p+2) B.p c.p+1 D(p+1)+2
答案选C,但是这是怎么个运算方法???求解,谢谢啦
不好意思,昨天有点迷糊,哈哈哈哈 首先,a是一个数组,有两行三列。p是一个指针,这个指针定义为可以指向长度为3的一维数组。
然后p=a,就是将p指向了a的第一行,a的第一行是长度为3的一维数组,这里刚好对应。于是*(p+2),p两者一样,都是从a的首地址前进自身长度3乘以2后的内存空间,但前进3乘以1的空间就指向a的第二行了,这两者都越界。D选项这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了。至此可以看到A,B,D三项都是越过a数组访问了一个未知内存。c选项正确,没有越界,来到了a的内存空间。虽然数组与指针的关系你学过了,这里还是解释一下,“[]”与“*”功能相同,假定p指向三个元素的一维数组arr,那么p与*p都与数组名arr的含义相同,即arr的地址 谢谢了,倒戈卸甲, 倒戈卸甲 发表于 2020-12-25 11:28
首先,a是一个数组,有两行三列。p是一个指针,这个指针定义为可以指向长度为3的一维数组。
然后p=a,就是 ...
D,这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了
这句话可以再通俗的解释一下吗? 本帖最后由 倒戈卸甲 于 2020-12-25 19:36 编辑
迷砖00 发表于 2020-12-25 16:41
D,这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了
这句话可以再通俗的解释一下吗?
。。。。这原理不就和四则运算一样,(1+2)+3这个括号是不是没用,就是1+2+3嘛。这个括号也是没有任何用,就是p+1+2或者说就是p+3,由a前进3x3个内存空间。
对了,倒是前面为了省事用了我自己的话讲,但“内存空间”这个说法有点不好,在这里准确说应该是“int型变量大小的内存”,因为a是int数组。比如说*(p+3),那指向的地址应该是a+sizeof(int)*3*3。但应该不至于引起误解。
页:
[1]