前言
今日聚焦指针高阶基础内容:字符数组函数传参、指针函数与函数指针区分、const 修饰指针的四类写法辨析,偏向理论考点,无多余练习题,整理考试核心知识点。
一、一维字符型数组传参
1. 数组作函数形参本质
char pstr[] 作为形参,编译器会隐式转换为 char * 指针,形参本质就是指针,函数内部无法获取数组真实长度,需要额外传长度或者依靠 \\0 判定字符串结尾。
2. 两种遍历字符串写法解析
char str[32] = {0};
char *p = str;
// 指针遍历
while(*p != '\\0')
{
p++;
}
// 数组下标遍历
int i = 0;
while(str[i] != '\\0')
{
i++;
}
- 下标遍历:依靠索引 i 偏移定位字符,通俗易懂;
- 指针遍历:直接操作地址,效率更高,嵌入式开发更常用;
- 共同点:二者都是逐个向后偏移,直到遇见字符串结束符 \\0 停止。
二、指针函数 & 函数指针(极易混淆考点)
1. 指针函数
定义:本质是函数,函数的返回值为指针类型。
标准写法:
int *fun(int x, int y); // 返回 int* 整型指针
char *fun(void); // 返回 char* 字符指针
硬性红线(必考易错点)
- ❌ 禁止返回局部变量的地址:局部变量存储在栈区,函数执行结束后栈空间自动释放,返回的地址会变成野指针。
- ✅ 合法返回:全局变量地址、堆区 malloc 开辟空间地址、传入的实参地址。
拓展:指针函数返回的指针,可以直接当作其他函数的参数使用。
2. 函数指针
定义:本质是指针,专门用来存放函数的内存地址,用来指向一个函数。
简单区分口诀:
- 类型 *函数名() → 指针函数(返回指针)
- 类型 (*指针名)() → 函数指针(指向函数)
三、const 修饰指针(4 种格式速记)
const 含义:readonly,只读,被修饰的内容不允许修改。
1. const int *p;
2. int const *p;
3. int *const p;
4. const int *const p;
5. int const *const p;
分组详解
第 1、2 条完全等价(const 修饰 *p(指针指向的数据))
- 指针变量 p:可以随意更改指向;
- *p:不可以修改指针指向内存里的值。
第 3 条(const 修饰指针变量 p 本身)
- 指针 p 一旦初始化,指向永久固定,不能更改;
- *p 指向的数据可以正常修改;
- 强制要求:定义时必须初始化赋值。
第 4、5 条完全等价(同时修饰 p 和 *p)
- 指针 p 不能更改指向;
- 指向的数据也无法修改;
- 定义时必须初始化,属于完全只读指针。
极简背诵口诀
- 星前 const:内容只读,指针乱跑
- 星后 const:指针钉死,内容可改
- 前后都 const:指针、内容全都不能改



