c++中指针p,*p的区别
简单的来说p就是地址,是&a,*p就是a
指针的创建:
int* p = 100;
//创建一个指针,改变指针指向地址所在内容为100;
int a = 50;
int* p = &a;
// 类型* name = &name;
//类型+* 表示指针的类型,&加名称表示初始化类型+*的实体,也就是说a的类型要和int* 的类型一致
1.指针的创建和存储
提到指针就需要知道在c++中数据是怎么存储的:
数据在存储时会有一个唯一的地址,这个地址以16进制数表现.
指针变量就是指向这个地址.
示例如下:
//创建一个新内存,存储一个整型数字10
int a = 10;
//创建一个指针指向a的地址,这里的p指向的内容为地址
int* p = &a;
//解引用在变量名前加*,这时*p是地址中存储的数字
//这里更改地址中存储的数据为100
*p = 100;
cout<<"a的地址是: "<<&a<<endl;
cout<<"p指向的地址是: "<<p<<endl;
cout<<"*p= "<<*p<<endl;
cout<<"a= "<<a<<endl;
cout<<"指针所占内存为: "<< sizeof(int*)<<endl;>>
a的地址是: 0x7fff9d2aff0c
p指向的地址是: 0x7fff9d2aff0c
*p= 100
a= 100
指针所占内存为: 8
注意:这里指针所占内存跟电脑的操作系统有关,32位系统无论什么类型的指针,他所占内存都是4,64位系统则是8.这里我的电脑就是64位系统.
sizeof(类型),可以获取该类型所占的内存大小.
2.空指针和野指针
2.1空指针
int* p = NULL;
//空指针的作用是初始化
//空指针不能被访问和修改
*p=1000;//违法操作
2.2野指针
//野指针本身就是一个违法操作,一般不要使用
//直接定义一个内存,而不是引用的方式定义
int* p=(int)0x00111