指针高级
1.概念
地址:内存中用来区分不同字节的地址编号;
指针:指针的值是一个地址编号,指针具有指向性
指针指向一段连续的内存空间
值:指向空间的起始地址编号;
类型:指向的连续内存空间的大小
指针变量:指针变量是用来保存指针类型数据的变量;
2.运算符 & *
(1)取地址运算符:获取一个指向操作数变量的指针;
(2)指针运算符:获取操作数指针所指向的空间;
注意事项:1.&运算符只能操作变量,*运算符只能操作指针;
2.取地址运算符具有类型升级作用,指针运算符具有类型降级 *(寻址)p(指针) == a
3.指针变量
(1)指针变量的定义:
数据类型 *变量名;
int *p;
#define P_INT int *
P_INT p, q;
p:是一个int *指针
q:是一个int
typedef int *pInt_t;
pInt_t p, q;
p:是一个int *指针
q:是一个int *指针
4.二级指针:
含义:指向一级指针的指针;
用途:1.被调想要修改主调空间的值,就需要对主调空间类型&,得到指向该类型的指针;
2.指针的数组,在函数传参时,数组名对应类型为指向元素一级指针的指针;
int arry0[5];
arry0 是 int *常量
int *arry[5];
arry 是 int **常量
5.void *
void:缺省类型 不能定义void类型变量
void *:万能接收指针,接收任何类型的指针;
memset:内存设置
memcpy:内存拷贝
memcmp:内存比较
6.指针的算数运算
+:p + N;
-:p - N;
p0 - p1:
++:p++;
--:p--;
7.const 关键字
read-only:
注意:1.const关键字在定义变量时一定要初始化;
2.const修饰的只读变量p,仅仅指不能通过变量名修改;
1.const char *p;
2.char const *p;
3.char * const p;
4.const char * const p;
5.char const * const p;
1和2:定义了一个指针变量p,变量p自身可以被修改,p指向的空间不能被修改,*p = 不能作为左值;
3:定义了一个指针变量p,变量p自身空间不可以被修改,p指向的空间可以被修改,p = 不能作为左值;
4和5:定义了一个指针变量p,变量p自身空间不可以被修改,p指向的空间不能被修改,p = 不能作为左值,*p = 不能作为左值;
8.指针数组
指针的数组:是一个数组,元素是指针;
int *a[5];
定义了一个数组,数组的数组名a,a包含了5个元素,元素的类型是int *;
9.数组指针
数组的指针:是一个指针,指向整个数组;
int (*p)[5]
定义了一个指针,指针指向一个数组,数组有5个元素,每个元素都是int;
10.指针和数组的关系
数组的数组名是指向数组首元素的指针;
int a[10];
int *p = a;
a[i] == *(a + i) == *(p + i) == p[i];
指针和二维数组的关系:
int a[3][5]; 类型 &后类型 *后类型
a int ()[3][5]; int (*)[3][5]; int ()[5];
a[i] int ()[5]; int (*)[5]; int
a[i][j] int int * ---