首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组地址有关问题

2012-08-27 
数组地址问题void main(){int a[5] {10, 20, 30, 40, 50}int *ptr (int *)(&a + 1)printf(%d, %d,

数组地址问题
void main()
{
  int a[5] = {10, 20, 30, 40, 50};
  int *ptr = (int *)(&a + 1);
  printf("%d, %d", *(a+1), *(ptr-1));
   
}


*(a+1)输出20没有问题,(&a + 1) 为什么就指到了数组尾部?
*(ptr - 1) = 50;

[解决办法]
1. a和&a[0]都是数组第一个元素的地址,&a是整个数组的地址,他们的值尽管是一样的,但是数据类型是不同的。
2. 指针的加减运算和其类型有关。比如&a + 1中的1就是一个sizeof(a)的大小

热点排行