1.代码如下
#include<iostream>
using namespace std;
int main()
{
int *a=new int(); //创建一个a指针指向一片空间
a[0]=1; //进行赋值操作
a[1]=2; //也可写作*(a+1)=2;
cout<<"a "<<a<<"\n"
<<"a+1 "<<a+1<<"\n"
<<"&a "<<&a<<"\n"
//<<"&(a+1) "<<&(a+1)<<"\n"
<<"*a "<<*a<<"\n"
<<"*(a+1) "<<*(a+1)<<"\n"
<<"*&a "<<*&a<<"\n"
;
}
运行如下
a是一个指针,值为存有数据1的地址,a+1为对a地址的加上一个int字节大小的地址,&a为a的地址,*a即a地址所存的数据。
简而言之,a是地址,*a是那个地址中所存放的值
*&a是存放a地址的地址的值,也就是a地址
2.代码如下
#include<iostream>
using namespace std;
int main()
{
int a=1;
*(&(a)+1)=2;
cout<<"a "<<a<<"\n"
<<"&a "<<&a<<"\n"
<<"&a+1 "<<&a+1<<"\n"
<<"*(&a+1) "<<*(&a+1)<<"\n"
<<"(&a)[1] "<<(&a)[1]<<"\n"
;
}
运行如下:
a是一个变量,&a是a的地址,也可以理解为指向a数据的指针
因为&a是指针,所以可以进行如*(&(a)+1)=2或者(&a)[1]=2的操作,把&a看成一个int类型的数组来进行操作,注意&(a)一定要带括号,不然可能会被编译器误处理。
ps:链表应该也可以这么理解,只不过是地址不连续,通过一个个指针联系起来的存放多个值的。