[学习资料] 返回指向常量的指针

[复制链接]
 楼主| 643757107 发表于 2025-2-25 10:18 | 显示全部楼层 |阅读模式
  1. const int *abc(void)
  2. {
  3.     // 函数体
  4. }
返回类型:const int*

这是一个指向 const int 的指针,表示指针指向的整数值是常量,不能通过该指针修改。

函数名:abc

参数列表:void

表示该函数不接受任何参数。

函数体:{}

函数体为空,这是一个不完整的实现。


函数的作用
这个函数的目的是返回一个指向 const int 的指针。通常,这种函数会返回一个指向常量数据的指针,调用者可以通过该指针读取数据,但不能修改数据。

  1. const int *abc(void)
  2. {
  3.     static int value = 42;  // 静态变量,确保函数返回后指针仍然有效
  4.     return &value;          // 返回指向 value 的指针
  5. }
static int value = 42;:

使用 static 关键字确保 value 的生命周期延长到程序结束,避免返回局部变量的地址(局部变量在函数结束后会被销毁,导致悬空指针)。

return &value;:

返回 value 的地址,但由于返回类型是 const int*,调用者不能通过该指针修改 value 的值。


  1. #include <stdio.h>

  2. const int *abc(void)
  3. {
  4.     static int value = 42;
  5.     return &value;
  6. }

  7. int main()
  8. {
  9.     const int *ptr = abc();  // 获取指向常量整数的指针
  10.     printf("Value: %d\n", *ptr);  // 输出: Value: 42

  11.     // *ptr = 100;  // 错误!不能通过 const int* 修改值
  12.     return 0;
  13. }
const int *ptr = abc();:

调用 abc() 函数,返回一个指向 const int 的指针,并将其赋值给 ptr。

printf("Value: %d\n", *ptr);:

通过指针读取值并输出。

*ptr = 100;:

如果取消注释,会导致编译错误,因为 ptr 是一个指向常量的指针,不能用于修改值。


 楼主| 643757107 发表于 2025-2-25 10:18 | 显示全部楼层
返回局部变量的地址是危险的:
如果函数返回局部变量的地址,会导致未定义行为,因为局部变量在函数结束后会被销毁。例如:
  1. const int *abc(void)
  2. {
  3.     int value = 42;  // 局部变量
  4.     return &value;    // 错误!返回局部变量的地址
  5. }
解决方法:

使用 static 关键字延长变量的生命周期。

使用动态内存分配(如 malloc),但需要调用者负责释放内存。

const 的含义:

const int* 表示指针指向的值是常量,不能通过该指针修改。

如果需要指针本身是常量(即指针不能被修改),可以写成 int* const。

如果指针和指向的值都是常量,可以写成 const int* const。

函数体不能为空:
如果函数体为空,编译器可能会发出警告或错误。确保函数有实际的实现。

 楼主| 643757107 发表于 2025-2-25 10:19 | 显示全部楼层
const int *abc(void) 是一个合法的函数声明,表示该函数返回一个指向 const int 的指针。

函数的作用通常是返回一个指向常量数据的指针,调用者可以读取但不能修改数据。

注意避免返回局部变量的地址,否则会导致未定义行为。
 楼主| 643757107 发表于 2025-2-25 10:29 | 显示全部楼层
这玩意儿不复习复习,就弄错了。
 楼主| 643757107 发表于 2025-2-25 10:35 | 显示全部楼层

需要注意的是,这种变量一定要在创建的时候赋值,负责就是报错。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jiekou001 发表于 2025-2-26 15:21 | 显示全部楼层
原来还可以这么用。
wanduzi 发表于 2025-2-26 18:55 | 显示全部楼层
遇到指针就容易蒙蔽,有时候用.,有时候用-> 还有*,还有&
xixi2017 发表于 2025-2-28 14:47 | 显示全部楼层
看完之后提高了基础知识。
初级工程渣 发表于 2025-3-26 15:00 | 显示全部楼层
这个 const int *abc(void) 函数的作用是返回一个指向 const int 的指针,使得调用者可以读取返回值但不能修改它。
kepe 发表于 2025-4-24 16:05 | 显示全部楼层
调用者不能通过该指针修改 value 的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

3931

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部