c语言的数组的地址的表示方法
2008-10-23 13:15
363 查看
今天刚发现了c语言数组地址表示另一种不错的方法。这个方法跟指针结合起来,对于操作内存来说,非常方便。
#include<stdio.h>
int main(void)
{
int c[5] = {1,2,3,4,5};
int *ptr = (int *)(&c +1);
printf("%d %d\n", *(c +1), *(ptr-1));
}
上边的代码执行完毕后,会出现什么结果?
*(c+1),应该很明显: 2;
*(ptr-1),结果是: 5;
分析:
可以试一下一下代码:
printf( “%p\n”, c+5 );
printf("%p\n", &c[5]);
printf("%p\n", &c+1);
运行以上3条代码后,你就会惊奇的发现,它们输出的地址,完全一致。
也就是说, &c+1表示了该数组最后一个元素的下一个地址。,而&c 与 c 或者 &c[0] 一致,都表示该数组的首地址。
另外,&c+1 比c+5 和 &c[5]使用更方便: 它不必知道将要操作的数组的sizeof。
或许还有其他更简便的方法吧?
#include<stdio.h>
int main(void)
{
int c[5] = {1,2,3,4,5};
int *ptr = (int *)(&c +1);
printf("%d %d\n", *(c +1), *(ptr-1));
}
上边的代码执行完毕后,会出现什么结果?
*(c+1),应该很明显: 2;
*(ptr-1),结果是: 5;
分析:
可以试一下一下代码:
printf( “%p\n”, c+5 );
printf("%p\n", &c[5]);
printf("%p\n", &c+1);
运行以上3条代码后,你就会惊奇的发现,它们输出的地址,完全一致。
也就是说, &c+1表示了该数组最后一个元素的下一个地址。,而&c 与 c 或者 &c[0] 一致,都表示该数组的首地址。
另外,&c+1 比c+5 和 &c[5]使用更方便: 它不必知道将要操作的数组的sizeof。
或许还有其他更简便的方法吧?
相关文章推荐
- c语言的数组的地址的表示方法
- Objective-c语言_用字符串方法和数组如何获取物理IP地址
- C语言数组地址【元素地址及数组地址获取方法区别】
- C语言不定长数组及初始化方法
- 用指针表示数组的地址与值
- 纯c语言实现动态分配多维数组的方法
- C语言从txt文件中逐行读入数据存到数组中的实现方法
- C语言查找数组里数字重复次数的方法
- C语言 数组名不是首地址指针
- c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
- C语言可以给字符数组赋值的方法
- c语言中用字符串数组显示菜单的解决方法
- C语言的数组名和对数组名取地址
- CCTextureAtlas(Atlas地图集图册-表示将小纹理组成一张纹理集以达到批量渲染目的 方法->TextureAtlas维护了一个ccV3F_C4B_T2F_Quad数组)
- C语言 内存分配 地址 指针 数组 参数 实例解析
- 在C语言中,表示真和假的最好方法是什么?
- C语言 内存分配 地址 指针 数组 参数 实例解析 (C语言复习)
- matlab中元胞数组cell元素的表示方法
- c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
- C语言的数组名和对数组名取地址