
C++指针(定义,用法,运算,类型……)
发布日期:2021-05-07 18:29:14
浏览次数:14
分类:精选文章
本文共 1351 字,大约阅读时间需要 4 分钟。
C++基础知识以及结构、文件(4)
指针
基本概念
指针,也成为“指针变量”,是一种大小为4个字节的变量,其内容代表一个内存地址。 定义 类型名 *指针变量名;如:int * p;//p是一个指针,变量p的类型是int * T * P,p是一个指针,变量P的类型是T * ,表达式 P的类型是T。通过表达式 * P,我们可以读写从地址P开始的sizeof(T)个字节。 “ * ”被称作间接引用运算符。“&”被称作取地址运算符。 “&x”表示变量X的地址,表达式“&x”的类型是T * 。 目前,无论T表示什么类型,其所占空间都是4个字符。 用法 将一个T类型的变量x的地址,赋值给一个类型为T * 的指针p(让P指向X),此后表达式 * P即代表所指向的变量,通过 * P读取或修改变量X的值。 指针运算 1)两个同类型的指针变量,可以比较大小 2)两个同类型的指针变量,可以相减。 3)指针变量可以和整数类型变量或常量相加。 4)指针变量可以和减去一个整数类型变量或常量。 5)指针变量可以自增、自减。 空指针 值为NULL的指针,被称作空指针。 在C++中,可以用“NULL”关键字对任何类型的指针进行赋值。 空指针指向地址0。一般来说,程序不需要,也不能够在地址0处进行读写。 指向指针的指针 如果一个指针里存放的是另一个指针的地址,则称这个指针为指向指针的指针。 T**P; // 此处T可以是任何类型名 ,那么 p 就被称作“指针的指针”。p这个指针,其类型是 T ****,而表达式“ * p”的类型是 T ,“ * p”表示一个类型为 T * 的指针。 同理,int *** p; int **** p; int ***** p ; 等,不论中间有多少个“”,都是合法的定义。 指针和数组 定义指针数组,如: int * array[5]; 那么array数组里的每个元素都是一个类型为int * 的指针。 一个数组的名字,实际上就是一个指针,该指针指向这个数组存放的起始地址。 定义数组:T array【N】; 标识符“array”的类型就是T *。 字符串和指针 字符串常量(和字符数组名)的类型就是char *。 可以用字符串常量(或字符数组名)给一个 char * 类型的指针赋值。 void指针 void * P; sizeof(void)没定义,表达式“ * P”也没有定义。 void指针主要用于内存拷贝。 函数指针 类型名( * 指针变量名 )(参数类型一,参数类型二……)//类型名表示被指函数的返回时类型。 指针和动态内存分配 在C++中,使用“new”运算符来实现动态内存分配。 P=new T;//T是任意类型名,P是类型为T * 的指针。(分配sizeof(T)个字节内存空间) P=new T[N];//T是任意类型名,P是类型为T * 的指针。N代表元素个数,可以是任何值为正整数的表达式,表达式里可以包含变量、函数调用。(分配N * sizeof(T)个字节内存空间) C++提供“delete”运算符,用以释放动态分配的内存空间。 delete指针必须指向动态分配的内存空间。 用“new”运算符动态分配的内存空间,一定要用“delete”运算符释放。