#include <iostream>
using namespace std;
/*
值一样,但是含义不一样,做运算过后结果自然不一样。
*/
int main()
{
int a[5] = {1,2,3,4,5};
//(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr。
int *ptr = (int *)(&a + 1);
//表示数组第一个元素的值,表示a数组的最后一个元素的值(即下一个数组地址的前一个值)
printf("%d\n%d\n", *(a + 1),*(ptr-1));
//数组首地址,在此基础上加1为下一个数组的首地址,地址相减换算成十进制为20
printf("%x\n", &a);
printf("%x\n", &a+1);
//数组首元素的首地址,在此基础上加1该数组第二个元素的地址,地址相减换算成十进制为4
printf("%x\n", a);
printf("%x\n", a+1);
//注意,不能是一下写法,sizeof返回的是值是4,不是1,并不代表a[1]
//例如:0x0012ff6c+1*sizeof(int) 是正确的
//printf("%x\n", a+sizeof(int));
cout << sizeof(int) << endl;
cout << sizeof(a) << endl;
cout << 5*sizeof(int) << endl;
//同上,不能这样写printf("%x\n",&a+(5*sizeof(int)));
system("pause");
using namespace std;
/*
值一样,但是含义不一样,做运算过后结果自然不一样。
*/
int main()
{
int a[5] = {1,2,3,4,5};
//(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr。
int *ptr = (int *)(&a + 1);
//表示数组第一个元素的值,表示a数组的最后一个元素的值(即下一个数组地址的前一个值)
printf("%d\n%d\n", *(a + 1),*(ptr-1));
//数组首地址,在此基础上加1为下一个数组的首地址,地址相减换算成十进制为20
printf("%x\n", &a);
printf("%x\n", &a+1);
//数组首元素的首地址,在此基础上加1该数组第二个元素的地址,地址相减换算成十进制为4
printf("%x\n", a);
printf("%x\n", a+1);
//注意,不能是一下写法,sizeof返回的是值是4,不是1,并不代表a[1]
//例如:0x0012ff6c+1*sizeof(int) 是正确的
//printf("%x\n", a+sizeof(int));
cout << sizeof(int) << endl;
cout << sizeof(a) << endl;
cout << 5*sizeof(int) << endl;
//同上,不能这样写printf("%x\n",&a+(5*sizeof(int)));
system("pause");
return 0;
}