1 指针的定义
数据类型 *变量名;
int *p;
double *p;
char *p;
short *p;
long *p;
float *p;
指针占8个字节(所有指针均为8个字节)
2. 指针操作运算符
&:获得变量在内存空间中的首地址
*:获得指针指向空间的值
*p = 100;
将右边的值赋值给p指向的空间
num = *p;
取p指针指向空间中的值
*和&连用,可以将两个运算符省去
直接访问:通过变量名访问内存空间
间接访问:通过变量在内存空间中存放的地址访问空间
3. 指针变量的初始化
int *p;
空指针:指向内存地址为0x0的指针
野指针:未经初始化的指针,或指向一片已经被释放过空间的指针
注意:
1.避免出现野指针
2.定义指针时必须初始化为NULL,防止出现野指针
4. 指针的算数运算
指针+1:向内存高地址偏移指向数据类型大小个字节空间
指针-1:向内存低地址偏移指向数据类型大小个字节空间
+ p + 1
- p - 1 p - q
++
--
>
>=
<
<=
==
!=
5. 指针和数组的关系
数组存储数据
指针操作数据
int a[5];
1.数组的数组名是指向数组第一个元素的指针
a == &a[0]
一般情况下a可以理解为int*型:
以下2中情况不能将a理解为int*型:
1.sizeof运算时
2.&运算时
2.访问一维数组下标为n元素的方式:
int a[5];
int *p;
p = a;
a[n] == *(a + n) == *(p + n) == p[n]
6. 使用指针操作字符串
char str[32] = {"hello world"};
1.利用指针对字符串遍历:
char *p = NULL;
p = str;
while (*p != '\0')
{
p++;
}
*p != '\0'
p != NULL