&是取地址,还是引用
int main(int argc, char **argv)
{
int a[]={1,2,3,4,5};
int *ptr=(int *)(&a+1);//&a是不是取地址,还是引用?
printf("%d",*(ptr-1));
return 0;
}
=======
输出:5
为什么会输出5呢?请详解。谢谢
[解决办法]
取地址!
[解决办法]
引用是C++的概念,C语言没有引用。
[解决办法]
a是数组 &a+1是a的地址加四个字节 ptr是指向int型的指针 其-1只是ptr地址减一个字节
[解决办法]
取地址。
[解决办法]
[解决办法]
a是数组,&a 就是指向数组的指针呗 int(*p)[5]
&a+1所以位移5个int
*(ptr-1)又是int* 反位移1个
5-1=4,位移4位就是第五个数
不懂的话看http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?64954
看完就懂了
[解决办法]
[解决办法]
a是一个int[5]类型,所以&a+1就会到数组末尾,再减1就是5的位置
[解决办法]
如果&前面有数据类型,就表示引用。其它情况是取地址运算(一元操作符)或者按位与(二元操作符)。
[解决办法]
类型标识符 &引用名=目标变量名
声明的时候