指针,取地址运算符(&),malloc和new
取地址运算符(&)
定义:(&p)则是这样一种运算,返回一个指针,该指针的值是当时声明p 时开辟的地址,指针的类型是p的类型对应的指针类型。(对,&得到的地址指针是有类型的)
例如:
int a=1;
double *p=&a;
编译时会报错:“ warning C4133: “初始化”: 从“int *”到“double *”的类型不兼容”,需要强制类型转换
从上面也可以知道,&可以将数据转换成指针 int* p=&a;
指针的初始化
struct node//定义一个节点的结构 { int data; struct node* left; struct node* right; };
比如声明一个结构体指针node* p
我要把这个指针指向NULL(也就是初始化这个指针)
如果直接 p=NULL //这样使用时是会有错误的,会有提示:访问权限冲突,p是nullptr
正确的初始化是 node* p=new node; //p的值为new返回的内存地址,大小是node的大小,但该地址的对应的值不确定。
p=NULL;
也可以这样:node* p=(struct node*)malloc(sizeof(struct node));
p=NULL;
上面两种方式都是给这个指针分配内存,在初始化指针为空,p=NULL
也可以先什么数据,在用&转换成指针
node t;
node *p=&t;
new的用法
1、int* p = new int; //给p分配了地址,但是还没有内容
2、int* p = new int(520); //有地址也有内容
nullptr
C++ 11新增的,为了区分NULL和 0,在c++把NULL和0视为同一种东西
free()
释放内存空间的函数,通常与申请内存空间的函数malloc()结合使用,可以释放由 malloc()、calloc()、realloc() 等函数申请的内存空间。
等风起的那一天,我已准备好一切