目录
1 指针的概念
2 指针的定义
3 指针操作运算符
4 指针变量的初始化
5 指针的算数运算
6 指针和数组的关系
指针这个东西算是c语言最好用的工具了,它可以直接操作底层内存,达到其他编程语言不能干的操作,指针也可以使我们的代码变得简单高效。
1 指针的概念
地址:内存中用来区分不同字节空间的编号
指针:指针就是地址,地址就是指针
指针变量:用来存放指针的变量称为指针变量
2 指针的定义
数据类型 *变量名;
int *p;
double *p;
char *p;
short *p;
long *p;
float *p;
指针占8个字节(所有指针均为8个字节)
3 指针操作运算符
&:获得变量在内存空间中的首地址
*:获得指针指向空间的值
*p = 100;
将右边的值赋值给p指向的空间
num = *p;
取p指针指向空间中的值赋值给num
*和&连用,可以将两个运算符省去
直接访问:通过变量名访问内存空间
间接访问:通过变量在内存空间中存放的地址访问空间
4 指针变量的初始化
int *p = NULL;
空指针:指向内存地址为0x0的指针
野指针:未经初始化的指针,或指向一片已经被释放过空间的指针
注意:
1.避免出现野指针
2.定义指针时必须初始化为NULL,防止出现野指针
5 指针的算数运算
指针+1:向内存高地址偏移指向数据类型大小个字节空间
指针-1:向内存低地址偏移指向数据类型大小个字节空间
6 指针和数组的关系
数组存储数据
指针操作数据
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]
3.如何使用指针操作遍历字符串
char *p = NULL;
p = str;
while (*p != '\0')
{
p++;
}
eg:利用指针间隔打印字符串"hao hao xue xi"
#include <stdio.h>int main(int argc, const char *argv[])
{char str[32] = {"hao hao xue xi"};char *p = NULL;p = str;while(*p != '\0'){putchar(*p);p++;}return 0;
}