我明白你什么意思,指针的概念确实不好理解!
1,先给你说下指针,你把指针理解了运算符的抵消就明白一半了!
指针里面是保存的内存地址(就像int变量里面保存的是整型变量一个意思)。
整型变量保存在内存里面,我可以通过这个变量名称来调用这个数据,也可以通过指针里面这个变量的地址加上*(间接访问运算符),来调用这个数据。
2,再说下运算符*和&
*是间接访问运算符:就是可以通过地址,找到这个地址里面的变量,所以
*p1
就等同于变量a
&是求地址运算符:就是将变量所在的内存地址,提取出来
这两个运算符的运算等级是相同的,也就是说谁距离变量近,就谁先。所以*&a和*(&a)是一样的,都是先取地址,在对地址进行间接访问。但是一定要注意*与&的顺序,&*a是无效的。
3,再说下题
*运算符就是对地址进行操作的,那么
*地址
的意思就是访问地址里面的数据,而&a就是取变量a的地址,所以*&a:
先取变量a的地址
再
对地址进行间接访问,两个操作就相互抵消了,最后还是变量a。
4,还有什么不明白的么?
无代码无真相。
是类似于这样吗:
int
a;
printf("address:
%p\n",
&a);
有的时候,退出程序后立即重新运行一次,使用的变量的地址还会是之前的地址,这在我之前测试程序的时候发现的,每次退出再重新运行程序,有几次打印的变量的地址都是一样的。
就算是特意开其它程序,其它程序占用的内存空间也不一定会是你那个程序之前占用的内存空间,可用内存越大,程序的内存空间的重叠几率就会越大。