打印
[学习资料]

返回指向常量的指针

[复制链接]
83|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
const int *abc(void)
{
    // 函数体
}
返回类型:const int*

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

函数名:abc

参数列表:void

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

函数体:{}

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


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

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

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

return &value;:

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


#include <stdio.h>

const int *abc(void)
{
    static int value = 42;
    return &value;
}

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

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

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

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

通过指针读取值并输出。

*ptr = 100;:

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


使用特权

评论回复
沙发
643757107|  楼主 | 2025-2-25 10:18 | 只看该作者
返回局部变量的地址是危险的:
如果函数返回局部变量的地址,会导致未定义行为,因为局部变量在函数结束后会被销毁。例如:
const int *abc(void)
{
    int value = 42;  // 局部变量
    return &value;    // 错误!返回局部变量的地址
}
解决方法:

使用 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 | 只看该作者
这玩意儿不复习复习,就弄错了。

使用特权

评论回复
5
643757107|  楼主 | 2025-2-25 10:35 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

215

主题

3873

帖子

11

粉丝