指针

  1. 什么是指针:指针是储存地址的变量,他也有自己的地址,他通过自己储存的地址指向内存单元

avatar

  1. 指针的声明:数据类型 *指针变量名;
    1
    int *p;

注意:因为当不赋初值时,系统将随意给他个地址,很容易出错,所以一般用NULL给他赋个初值

  1. 取地址: &变量名(&为地址运算符)
  2. 使用指针储存地址: 数据类型 *指针变量名 = 取地址
    1
    2
    int a = 3;
    int *p = &a;

特别注意的是指针的数据类型应和所指向的变量的数据类型相同

一种数据类型的指针变量可指向任意一个跟他同数据类型的变量

1
2
3
4
int a = 10;
int *p = &a;
int b =2;
p = &b;

  1. 使用*访问指向的数据

    1
    2
    int * a = 1;
    cout<<*a;//1
  2. 指向不同变量类型的指针长度相同,具体长度取决于编译器,32位编译器就是4个字节,64位编译器就是16个字节

    1
    2
    3
    double a = 3.45;
    double b = &a;
    cout<<sizeof(b);//4或8
  3. 动态内存分配:解决未知长度内存空间的问题,虽然也定义了长度但在delete时会将不用的销毁,若不用delete就会造成内存泄漏(即内存被占用却没发挥作用,而其他元素可使用元素减少,造成程序运行效率降低)

    1
    2
    3
    4
    int a = new int;//要指明类型,这是给一个元素分配内存
    delete a;//对应的delete
    int b = new int[10];//这是给多个元素分配内存的形式
    delete []b;//对应的delete

举一个为字符串分配内存的例子

1
2
3
4
string name;
cin>>name;//注意要调用string库调用cstring库报错
char *n = new char[name.length()+1];//注意不是strlen(),这个用于char,至于+1则是考虑到c++中对最后一个终止字符的风格
delete []n;

-------------本文结束感谢您的阅读-------------