指针,取地址运算符(&),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() 等函数申请的内存空间。

posted @ 2020-03-28 11:30  知道了呀~  阅读(950)  评论(0编辑  收藏  举报