指针是一个变量,其存储的是值的地址,而不是值本身。如何找到常规变量的地址?只需对变量应用地址运算符(&),就可以获得它的位置;
int donuts = 3;
&donuts就是取donuts变量的地址。
指针名表示的是地址。*运算符被称为间接值或解除引用运算符,将其应用于指针,可以得到该地址处存储的值。
int updates = 4;
int *p_updates = &updates;
*p_updates的值就是4。
p_updates = 5;
这时updates和p_updates的值都是5。
不能把整数赋予指针
int *pt;
pt = 0xB800000;
左边是指向int的指针,因此可以把它赋给地址,但右边是一个整数。
pt = (int *) 0xB800000;
赋值语句的两边都是整数的地址,因此这样赋值有效。
在运行阶段为一个int值分配未命名的内存,并使用指针来访问这个值。
int *pn = new int;
pn = 100;
new int告诉程序,需要适合存储int的内存。new运算符根据类型来确定需要多少字节的内存。然后,它找到这样的内存,并返回其地址。接下来,将地址赋给pn,pn是被声明为指向int的指针。现在,pn是地址,而pn是存储在那里的值。
new分配的内存块通常与常规变量声明分配的内存块不同。普通变量和指针的值都存储在被称为栈的内存区域中,而new从被称为堆或自由存储区的内存区域分配内存。
所以使用new生成的内存需要释放。
delete pn;
这里会释放pn指向的内存,但不会删除指针pn本身。例如,可以将ps重新指向另一个新分配的内存块。一定要配对地使用new和delete;否则将发生内存泄漏。
不要尝试释放已经释放的内存块,这样做的结果将是不确定的。一般来说,不要创建两个指向同一个内存块的指针,因为这将增加错误地删除同一个内存块两次的可能性。
int *ps = new int;标签:int,基础,c++,地址,内存,new,pn,指针 From: https://blog.51cto.com/u_3764469/6049215
int *pq = ps; //pq和ps都指向同一个地址
delete pq;