- 什么是指针:指针是储存地址的变量,他也有自己的地址,他通过自己储存的地址指向内存单元
- 指针的声明:数据类型 *指针变量名;
1
int *p;
注意:因为当不赋初值时,系统将随意给他个地址,很容易出错,所以一般用NULL给他赋个初值
- 取地址: &变量名(&为地址运算符)
- 使用指针储存地址: 数据类型 *指针变量名 = 取地址
1
2int a = 3;
int *p = &a;
特别注意的是指针的数据类型应和所指向的变量的数据类型相同
一种数据类型的指针变量可指向任意一个跟他同数据类型的变量1
2
3
4int a = 10;
int *p = &a;
int b =2;
p = &b;
使用*访问指向的数据
1
2int * a = 1;
cout<<*a;//1指向不同变量类型的指针长度相同,具体长度取决于编译器,32位编译器就是4个字节,64位编译器就是16个字节
1
2
3double a = 3.45;
double b = &a;
cout<<sizeof(b);//4或8动态内存分配:解决未知长度内存空间的问题,虽然也定义了长度但在delete时会将不用的销毁,若不用delete就会造成内存泄漏(即内存被占用却没发挥作用,而其他元素可使用元素减少,造成程序运行效率降低)
1
2
3
4int a = new int;//要指明类型,这是给一个元素分配内存
delete a;//对应的delete
int b = new int[10];//这是给多个元素分配内存的形式
delete []b;//对应的delete
举一个为字符串分配内存的例子1
2
3
4string name;
cin>>name;//注意要调用string库调用cstring库报错
char *n = new char[name.length()+1];//注意不是strlen(),这个用于char,至于+1则是考虑到c++中对最后一个终止字符的风格
delete []n;