C++指针(一)
指针是一个变量,其存储的是值的地址,而不是值本身,如果variable是一个变量,则&variable就是它的地址。
#include <iostream> int main() { using namespace std; int variable = 6; cout << "variable value = " << variable << "\n"; cout << "variable address = " << &variable << "\n"; return 0; }
输出为:
variable value = 6
variable address = (随机的地址)
声明和初始化指针
#include <iostream> int main() { using namespace std; int variable = 6; //声明变量 int* p_variable; //声明指针 p_variable = &variable; //指针指向variable cout << "Value : variable = " << variable; cout << ",*p_variable = " << *p_variable << "\n"; cout << "Addresses : &variable = " << &variable; cout << ",p_variable" << p_variable << endl; *p_variable = *p_variable + 1; cout << "Now variable = " << variable << endl;
system("pause"); return 0; }
输出为:
Value : variable = 6,*p_variable = 6
Addresses : &variable = 010FF8B0,p_variable010FF8B0
Now variable = 7
指针在使用的时候一定要初始化,指针不被初始化的时候,它有可能是任何值。例如:
long *a; *a = 2;
a确实是一个指针,但是它指向哪里呢?上述代码并没有将地址赋给a,那么2将被放在哪里我们也不知道,这将导致程序出现难以追踪的bug,我们可以这样初始化指针a。
int number = 2; int * a = &number;
使用new分配内存,delete释放内存。
在C语言中使用库函数malloc()来分配内存,在C++中任然可以这样用,但C++提供更好的方法——new运算符。
#include <iostream> int main() { using namespace std; int *p = new int; //申请内存 *p = 100; double *pt = new double; *pt = 100.00; cout << "*p value = " << *p; cout << ",p address = " << p << endl; cout << sizeof(p) << "," << sizeof(pt) << endl; cout << sizeof(*p) << "," << sizeof(*pt) << endl; delete p; //释放内存 delete pt; system("pause"); return 0; }
输出为:
*p value = 100,p address = 012EB2D0
4,4
4,8
使用new创建动态数组
例如创建创建一个包含10个元素的int数组:
int * p = new int[10];
使用完动态数组后应使用delete [] p来释放内存。
Tips:
1.不要使用delete来释放不是new分配的内存。
2.对空指针应用delete是安全的。
3.不要使用delete释放同一个内存卡两次。
4.使用new [] 为数组分配内存,应使用delete [] 来释放。