数组a[]中&a和a的区别
来源:互联网 发布:java中的io和nio 编辑:程序博客网 时间:2024/05/19 04:54
#include<stdio.h>int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf("%d,%d", *(a + 1), *(ptr - 1));return 0;}//输出:2,5
前提:a和&a的值是一样的,但是意义有所区别,a指的是a[0]的地址,&a指的是数组a的地址(“数组名”代表数组第一个元素的地址,“&数组名”代表的是整个数组的地址)。从而导致a+1和&a+1有了本质的差异。
a+1 = a[0]的地址+sizeof(int);(在第一个元素的地址上便宜一个数组元素的大小,即下一个元素,a[1]的地址。)
&a+1 = 数组a的地址+sizeof(a);(在数组的地址上偏移一个数组的大小,此时sizeof(a)中的a是一个数组,不是一个指针,计算出来是一个数组的大小,不是指针的大小)
*(a+1):先计算a+1,a指的是a[0]的地址,a+1是a[0]的地址+size(int),就是a[1]的地址;
因此*(a+1)就是a[1]的值,a[1] = 2。
*(ptr-1):先计算ptr-1,ptr=&a+1,其中&a+1=&a+sizeof(a)(数组地址+整个数组大小);
ptr-1=&a+sizeof(a)-sizeof(int),即数组最后一个元素的地址,&a[4];*(ptr-1) = a[4] =5。
阅读全文
1 0
- 数组中a和&a的区别
- 数组中a和&a的区别
- 数组中a和&a的区别
- 数组中a和&a 的区别?
- 数组中 &a和 &a[0],a 的区别
- 数组中 &a和 &a[0],a 的区别
- 数组a[]中&a和a的区别
- 数组a[],a和&a的区别
- 数组中a与&a的区别
- 数组名a和&a的区别
- 数组里a和&a的区别
- 数组里a和&a的区别
- 数组名a和&a 的区别
- 数组名a和&a的区别
- 数组里a和&a的区别
- 数组里a和&a的区别
- 数组里a和&a的区别
- 数组里a和&a的区别
- JVM高级特性与实践(六):Class类文件的结构(访问标志,索引、字段表、方法表、属性表集合)
- String类中自动重写compareTo( )方法对汉字的比较
- Codeforces Round #385 (Div. 2) 745B Hongcow Solves A Puzzle
- 【刷题剑指offer】把数组排成最小的数
- Codeforces 189A
- 数组a[]中&a和a的区别
- 第一个Java程序
- flickr 的全局主键生成方案
- Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?
- DataFrame.to_dict(orient='dict')
- break,comtinue,returned的区别
- Spring boot 页面分离 (freemarker 分离)
- 让你提升命令行效率的 Bash 快捷键
- 二叉树