欢迎光临
我们一直在努力

C 语言学习 Day12 博客笔记:字符数组传参、指针函数、函数指针、const 指针

前言

今日聚焦指针高阶基础内容:字符数组函数传参、指针函数与函数指针区分、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:指针、内容全都不能改

四、今日知识点总结

  • 字符数组传参等价指针,字符串遍历优先依靠 \\0 结尾判断;
  • 看括号区分:带 () 是指针函数,带 (*) 是函数指针;
  • const 看位置:* 左边限制数据,* 右边限制指针本身。
  • 赞(0)
    未经允许不得转载:171主机测评 » C 语言学习 Day12 博客笔记:字符数组传参、指针函数、函数指针、const 指针
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址