C++易忽略点

来源:互联网 发布:解说词配音软件 编辑:程序博客网 时间:2024/05/29 10:54

真的不想这样, 这样的题有啥意思, 谁会用到吗, 就当增加人知吧

对一个数组取&的时候, 出现了如下的问题:

#include <stdio.h>int main(){  const int MAXN = 8;  int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128};  int *p = (int*)(&a + 1 );  printf("%d\n", *(p - 2));  return 0;}

运行如下为什么, 因为&a 取的是数组的首地址, +1就相当偏移一个数组的大小,于是指向数组的end的位置(这个位置是有效的, 以前讨论过),  在-2是int指针减2, 指向64了。 


当程序如下的时候:

#include <stdio.h>int main(){  const int MAXN = 8;  int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128};  int *p = (int*)(a + 1 );  printf("%d\n", *p);  return 0;}
运行如下:



0 0