天天看点

C++学习笔记(三)指针与字符串

指针:访问动态分配的内存

数组内存分配:顺次存放,地址相互连接(二阶或者更高阶都是如此);可以在列表中进行初始化(但是不能跳跃赋值)

         例:a[3][4]=    {1,2,3,4,5,6,7,8,9,…}        //全部赋值(支持缺省维度)

                                     {{1,2,3,4},{5,6,7,8},…}      //分行赋值

                                     {{1},{0,6},{0,0,1,1}}            //部分元素赋值

同类型的数据才能初始化指针(auto和static不能互相赋值)

Void *Ptr可以存放任何类型地址,只做存放无法操作,使用前必须强制类型转换(无void类型的变量)

Void *Pv;  int i=5;

Int *Pint = static_cast<int *>(Pv);

常指针:不能通过指针改变指向对象的值,但是指针本身能够改变

         Const int*P1 = &a;  int b;

         P1=&b;//(正确,P1本身能够被改变)  *P1=1;//(错误,不能通过指针改变所指向的对象)

指针变量的算数运算(用于处理数组/链表):*(Ptr+n);/Ptr+n //访问Ptr后n个n数据(越过地址数和数据类型有关)的内容

指针关系运算(==、!=):检测其是否指向同一位置

         指针可以与0进行关系运算

指针处理数组元素

         Int *Pa = &a[0];或int *Pa = a;

         可以Pa++但是不能a++

指针数组         Point *Pa[2];

         Int Line1[],Line2[],Line3[];

         Int *PLine[3] = {Line1,Line2,Line3}; Line1、Line2、Line3地址不见得连续(二维数组的话会连续)

指针作为函数参数(传递一个数组)

指针作为返回值(一般返回静态数据或全局变量,动态数据离开函数会失效会造成非法地址引用)

指向函数的指针(不仅仅指向变量) 存储类型 数据类型 *函数名()

         数据指针指向数据存储区、函数指针指向程序代码区

         Void (*FuncPoint)(float a);//需要声明参数列表

         FuncPoint = PrintStuff;//指向函数

         FuncPoint(13.2);//调用

指向对象的指针

         Point a(5,10);   Point *Ptr;

         Ptr = &a;

         指针访问成员:        Ptr->GetX();

This指针:(隐含)指向当前对象本身      a.GetX();  等价于 This->X;      静态函数无this指针

指向类的非静态成员指针

         数据成员:   类型说明符 类名::*指针名;

                                     指针名 = &类名::数据成员名;

         函数成员:     类型说明序 (类名::*指针名)(参数列表);

         对象名.*类成员指针名;

         对象指针名->*类成员指针名;

C++学习笔记(三)指针与字符串

动态分配内存空间

         A a = new A(12,35);          new会返回指定类型的指针

         A *Ptr1 = new A();

         Delete a;//释放内存

申请和释放动态数组

         New 类型名T[数组长度] 数组长度可以是变量/常量(静态数组只能是常量)

         Delete[] 数组名P(P必须是new数组的首地址)|如果使用delete则只会释放首地址

继续阅读