一.指针
简化程序逻辑,提高程序灵活性
指针可以直接操作内存
1.指针概念
地址:
用来区分内存中不同字节的地址编号
指针:
指针的值是一个地址编号,具有指向性,描述连续空间的起始位置
指针的类型是描述连续空间的大小
指向性:
指向以自身地址编号开始的自身字节大小的连续空间
指针变量:
用来保存指针类型数据的变量
变量的值:
是指向另外一段内存空间起始地址的地址编号
2.&取地址运算符
获取一个指向操作数变量类型的指针
数据类型 对应的指针
int ---- int *
char ---- char *
float ---- float *
int * ---- int **
3.*指针运算符
指针运算符只能操作指针
int *p = &a 等价于 *p = a
&运算符具有类型升级作用,*具有类型降级作用
3.指针变量
定义:
数据类型 *变量名
数据类型:指针变量所指向的空间数据类型
有值:指向另外一段内存空间的起始地址编号
有空间:保存自身变量的值得空间
32位操作系统下,指针变量占据4B;64位操作系统下,指针变量占据8B
初始化:
int *p = NULL
野指针:指针指向无效非法空间
操作:
直接访问:p
操作指针变量自身空间
间接访问:*p
操作指针变量指向的空间
4.指针的运算
加法:
p + N //指针向高地址偏移N倍个自身指向数据类型字节的空间
p + p //无特定含义
减法:
p - N //指针向低地址偏移N倍个自身指向数据类型字节的空间
p - p //同种类型下,两指针地址偏移量所包含的指针指向数据类型的个数
自加
p++,++p //指针向高地址偏移自身指向数据类型字节的空间
自减
p--,--p //指针向低地址偏移自身指向数据类型字节的空间
5.指针和数组的关系
数组的数组名实质上是指向数组首元素地址的指针
数组后的[]可以认为是对数组进行了类型升级,即进行了指针运算
int *p = arry;
则四者等价:arry[n] = *(arry + n) = *(p + n) = p[n];
特殊情况:
在进行sizeof运算时,数组的数组名代表数组
&arry在对数组名进行取地址运算时,数组的数组名代表数组
5.指针和字符型数组的关系
char str[32];
//其中的内容有两份,分别在栈帧和字符串常量区,栈帧区内容可以被修改
char *pstr;
//仅存在于字符串常量区,其中内容不可被修改
C语言学习day11
最新推荐文章于 2024-09-25 09:27:18 发布