C++当中的指针汇总
作者:
疋瓞 | 来源:发表于
2022-02-08 16:05 被阅读0次
定义:
- 指针也叫做“指针变量”,大小为4个字节或8个字节(存放的是计算机内存的地址)。通过指针可以对指针指向的内存区域进行读写。
- 举例:
int * p//p是一个指针,变量p的类型是int *。
T p:p表示p所指位置存放的内容,内容大小为从p地址开始,sizeof(T)个字节。
*:称为间接引用运算符。
sizeof(T *)= 4(或8)字节
char * PC=&ch;//使PC指向ch
- 有了指针,就有了自有访问内存空间的手段。
- 不同类型的指针不能相互赋值。
- 指针运算:
P: T* 类型的指针
n:整数类型的变量或常量
P+n:T类型的指针,指向地址,地址为:P+nsizeof(T)
P++:P指向n+sizeof(T)
本质
- 对于一个指针来说,它本身存放的就是一个地址,所以大小是固定的。但是不同类型的指针规定了这个指针取数的时候,从其所指向的地址向后取多少个内存。
- 空指针:地址为0不能访问,指向地址0的指针是空指针,可以用“NULL”关键字对任何类型的指针进行赋值。NULL实际上就是整数0;
- 在指针作为函数形参时,可以直接修改所指地址的内容。写形参用“T *P”,写实参赋值的时候是“&m”。
指针类型
1、指针和数组:
- 数组名是一个指针常量(能赋值给其他相同类型的指针,但不接受其他指针赋值),指向数组起始位置。
- 作为函数参数时,T *P和T P[ ]等价。
- 注:在函数中形参是实参的一个拷贝。
- 指针和二维数组:一维数组a[i]是指向二维数组a[M][N]的,二维数组和一维数组一样在内存空间中是连续存放的。对于二维数组来说,一维数组就是它的指针。每个一维数组元素指向的都是二维数组对应行的行首元素地址。
例子:T a[M][N] //a[i]是一个一维数组,类型为T。sizeof(a[i])=sizeof(T)N
a[i]指向的地址:a的起始地址+iNsizeof(T);
2、指向指针的指针
int **PP;
int *p;
int n=1234;
p = &n;//p指向n所在位置的地址。
PP = &p;//PP指向指针p所在位置的地址。
3、指针和字符串
- 字符串常量类型是char *;
- 字符串数组名的类型也是char *,数组名就是一个地址。
- 注意每个字符串默认结束会加‘\0’,所以在计算空间时要大一号。
4、void指针
- 定义:void * p;
- 可以用任何类型的指针对void指针进行赋值或初始化
- sizeof(void)无意义,对void类型的指针p,p无定义,同理,对应的++p等运算也都是无意义的。
- void指针常用来做形参,代表该处能存放“任何类型”的指针。
4、函数指针
- 程序运行期间,每个函数都会占用一段连续的内从空间。而函数名就是该函数所占用内存区域的起始地址,我们可以将函数入口地址赋值给一个指针变量,使该指针变量指向该函数,然后通过指针变量来调用这个函数,这种指向函数的指针就是“函数指针”。
- 定义形式:类型名(*指针变量名)(参数1类型,参数2类型,···)
- qsort库函数其中包含的形参是一个函数指针。
本文标题:C++当中的指针汇总
本文链接:https://www.haomeiwen.com/subject/qpbbkrtx.html
网友评论