C语言【指针】

1. 基本语法

1.1 指针变量的定义和使用(重点)

指针是一种数据类型,指针变量指向谁 就把谁的地址赋值给指针变量

1.2 通过指针间接修改变量的值

指针变量指向谁 就把谁的地址赋值给指针变量

可以通过 *指针变量 间接修改变量的值

1.3 const修饰的指针变量

语法格式:

int a = 1;

const int *p1 = &a; // 等价于 int const *p1 = &a;

int * const p2 = &a;

const int * const p3 = &a;

从左往右看,跳过类型,看const修饰谁

如果修饰*,说明指针指向的内存不能改变

如果修饰指针变量,说明指针的指向不能改变,指针的值不能修改

1.4 指针大小

使用 sizeof() 测量指针的大小,得到的总是:4或8

sizeof()测的是指针变量指向存储地址的大小

在32位平台上,所有的指针(地址)都是32位(4字节);

在64位平台上,所有的指针(地址)都是64位(8字节);

1.5 指针步长

指针步长指的是通过指针进行递增或递减操作时,指针所指向的内存地址相对于当前地址的偏移量。

指针的步长取决于所指向的数据类型。

指针加n等于指针地址加上n个sizeof(type)的长度;

指针减n等于指针地址减去n个sizeof(type)的长度;

1.6 野指针和空指针

指针变量也是变量,是变量就可以任意赋值,但任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向的区域是未知(操作系统不允许操作此指针指向的内存区域)。

野指针不会直接引发错误,操作野指针指向的内存区域才会出问题

为了标志某个指针变量没有任何指向,可赋值为NULL

NULL是一个值为0的宏常量

1.7 多级指针

C语言允许有多级指针存在,在实际的程序中一级指针最常用,其次是二级指针。

2. 指针和函数

2.1 函数参数传值

传值是指将参数的值拷贝一份传递给函数,函数内部对该参数的修改不会影响到原来的变量

2.2 函数参数传址(重点)

传址是指将参数的地址传递给函数,函数内部可以通过该地址来访问原变量,并对其进行修改。

相关推荐
charlie1145141917 分钟前
Cinux · 第一次跳进 Ring 3:用户态与特权隔离
开发语言·c++·操作系统·开源项目
wuyk5559 分钟前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
躺不平的理查德24 分钟前
Windows C++ 第三方库使用流程备忘录--OpenCV
开发语言·c++
菜冻鱼39 分钟前
Python-sklearn-评估指标
开发语言·人工智能·python·机器学习·numpy·pandas·sklearn
你挚爱的强哥1 小时前
【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件
开发语言·javascript·ecmascript
LuminousCPP1 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Hello_Damon_Nikola1 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
worxfr1 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
带鱼吃猫1 小时前
预处理器:宏、运算符与条件编译
c语言·开发语言
小小龙学IT1 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法