a+1与&a+1
来源:互联网 发布:科鲁兹前氧传感器数据 编辑:程序博客网 时间:2024/04/25 12:04
终于不用担心写的东西涉及公司机密了。
今天做题遇到了二维数组地址计算的问题,之前记的比较混乱,且遇到了&a+1的情况,这种情况以前没遇到过,在网上查询后终于找到了答案。
http://www.cnblogs.com/auleaf/archive/2011/09/19/2181346.html
相关知识点引用自另外一位的博客,地址见上。
1.数组里a和&a的区别
对于一个数组,a是数组首元素的地址。
&a是整个数组的地址。
虽然a和&a的值一样,但是意义不一样
以上这段看上去还真是晕,平时也不见到用到&a,其实这个问题主要表现在&a+1和a+1上。借用一下auleaf的博客文章,举个栗子。
#include<stdio.h>
int main(void)
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1); //&a代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。
printf("%d %d\n",*(a+1),*(ptr-1));//a代表数组首元素的地址,+1应该加上sizeof(a[0]),所以a+1指
向a[1]处。
return 0; //输出是 2 5
a表示的是数组首元素地址,这是一个T=1(首元素是个1位的)指针,因此a+1*int表示的是a[1]的地址。
因此*(a+1)对应的是a[1]=2;*(ptr-1)对应的是a[5-1]=5
值得 注意的是这个过程中还有一个强制类型转换,即&a+1计算出来的地址强制转换成int*型。
牛客网的题目如下
这里涉及了多维数组。对于&a+1而言,仍旧是首地址+整个数组的地址,因此到了数组后一位地址上,下面ptr-1是数组后一位的地址减去1*int(因为ptr是int型的),也就是数组的最后一位,因此是12.
对于a+1而言,数组a认为是一个一位数组,其中每一位都是一个2*3的数组,a+1表示首地址加上a的一个元素的长度,因此是到了a[1],也就是第二层中的第二个括号第一个数字,7.
答案为7,12
- &a+1与a+1
- a+1与 &a+1
- a+1与&a+1
- Java--a++与 ++a 与 a=a+1 与a+=1
- 关于 *(&a+1) 与 *(a+1)区别
- a = a + 1与a + = 1的区别
- a+=1与a=a+1的区别
- a & (a-1) ?
- -a = ~a + 1 = ~(a-1)
- [c/c++]A a();与A a;
- a = a++ 与 a = ++a
- 1A
- 1A
- 1A
- &a+1
- (&a+1)
- 1 A
- 1A
- 操作系统和网络面试总结
- [解析]Objective-C 深浅拷贝
- ACM学习-破坏行动-最大网络流
- iOS软件开发 内存管理之拷贝
- C#学习之路,学习笔记 2.1 整形、浮点型和decimal型变量
- a+1与&a+1
- copy
- 洛谷2023维护序列(线段树区间乘+区间加)
- 一道Erlang测试题的多种解法
- 手势操作
- 【bzoj1857】[Scoi2010]传送带
- 英语九月总结
- C/C++ 知识点总结
- java 中的e.printStackTrace()方法