c++指针概念问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 05:00:53
谁能看明白 帮我解释下
#include "iostream.h"
void main()
{
int a=10;//这是创建一个int
int *m=&a;//这句话的意思是不是int* 一个m(申请一个指针m)然后这个指针变量的内容应该是a的地址,不应该是10?
int *p=(int*)m;//这是不是申请一个指针变量p,然后p的内容等于m的内容?也就是说p里边的内容存放的是m里的内容,也就是a的地址?
cout<<"p="<<p<<" *p="<<*p<<" &p="<<&p<<" &(*p)="<<&(*p)<<endl;
cout<<"m="<<m<<" *m="<<*m<<" &m="<<&m<<" &(*m)="<<&(*m)<<endl;
}
如果按我的理解 p=m等于一个地址
*p=*m也应该输出同一个一个地址(a的地址),因为*m=&a;而不是*m=a,如果这样才应该输出10,&a 和 a 是不同的呀
&p != &m
&(*p)=&(*m)//他们相等是因为*p=*m

输出的结果却是:

p=0x0012FF7C *p=10 &p=0x0012FF74 &(*p)=0x0012FF7C
m=0x0012FF7C *m=10 &m=0x0012FF78 &(*p)=0x0012FF7C
这是我理解这段代码的思路,不知道哪里错了

int* m=&a; // 相当于int* m; m=&a;
int* p=(int*)m; // 不需要类型转换,相当于int *p; p=m;

这时候,p,m,&a是一个值,都将是0x0012FF7C。

而因为p和m是不同的变量,因此p和m本身自己的地址是不一样的,比如上面例子里就是:&p=0x0012FF74,&m=0x0012FF78。

===============

记住,m是指针变量(int*类型),因此int* m=&a里面,不是*m=&a,而是m=&a。这里*m将是int类型。

当然,写成int* m或者int *m是没有区别的,不过如果要对指针初始化,建议写成前者,因为至少字面上好理解一些。

??? int *m=&a;//这句话的意思是不是int* 一个m(申请一个指针m)然后这个指针变量的内容应该是a的地址,不应该是10?
*** 如果解引用m,即*m,等于10;如果没有解引用,m的值就是a的地址,即&a
???? int *p=(int*)m;//这是不是申请一个指针变量p,然后p的内容等于m的内容?也就是说p里边的内容存放的是m里的内容,也就是a的地址?
**** int *p=(int*)m; //声明一个int类型的指针p,它指向*m,(int*)是类型转换;意思是将m转换成int类型,不过实际上,不必这样,因为m就是int type的;
p是a的地址,*p是a的值,&p是指针自己的地址,&(*p)是1.*p先解引用,获得a的值,然后再&a,获得a的地址

补充下吧,不知道你说的哪些不清楚
//-----
int* m=&a;
其实是这样的:
int* m;
m=&a;
通常略写为:int *m=&a;
明白了?

你输出的是地址啊