c++地址问题
2015-09-20 17:19
316 查看
int main(int argc,char**argv){ int a[4]={1,2,3,4}; int*ptr=(int*)(&a+1); printf(“%d”,*(ptr-1)); }
指针的实质为:地址+步长。指针的类型决定了步长。
定义了数组a[4],其中a,&a,&a[0]都是数组的起始地址。但是步长有区别,也就是指向的类型不同
a等同于a+0等同于&a[0],是指向数组第一个元素的指针,步长为指向的元素所占用的地址空间为sizeof(int) 。
&a也是指向数组第一个元素的指针,但其意义是指向整个数组的首地址,指向的类型为整个数组,所以其步长为4*sizeof(int)
a 的类型是 int *
&a 的类型是 int **
&a+1,移动四个位置,指向了4的下一个位置,
ptr也指向4的下一个位置,
ptr是int *,ptr-1 移动一个位置,指向了4
相关文章推荐
- C++虚继承的概念
- C/C++堆和栈的区别
- 项目19.2 能够对齐的数据
- 黑马程序员--C语言学习笔记之运算符
- C文件API函数
- C++中接口与抽象类
- 3Sum, 3Sum Closest, 4 Sum
- C深入笔记
- c++11 Thread库初探
- 项目19.1 字符及其编码
- Visual Studio C++ include与library
- 快速幂(C语言实现) 超详细 (转载)
- 应聘C语言知识点复习 二
- 模板函数 c++
- C++技术点积累(6)——异常处理、输入和输出流
- 怎样才算精通C语言呢?
- 由C++ assign()函数引出的一个问题
- C++学习计划
- C++中CloseHandle()函数的使用
- C++ static const 修饰成员