如果我写下这样的东西:

int f(char x, const int (*g) (const char x)) {
    return g(x);
}

const个有效地表达了我认为它所说的吗,也就是说,程序员基本上不能改变函数g的code?所以基本上,在将函数指针作为参数传递时,将这const放入是一种很好的做法?

推荐答案

第一个const声明返回的int是不可变的--但这并不重要,因为如果需要的话,接收器会将它复制到非constint中--这正是f()函数所做的.它调用g(),而g()被声明为返回const int,但f()返回int.前const个将被忽略.

这与更改g()的代码无关.这在任何情况下都是不允许的.

如果您想明确说明函数指针不会指向f内的另一个函数:

int f(char x, int (*const g) (const char x))

C++相关问答推荐

如何在C中通过转换为char * 来访问float的字节表示?

为什么静态说明符为内联函数生成外部定义?

丑陋的三重间接:可扩展的缓冲区管理 struct

DPDK-DumpCap不捕获端口上的传入数据包

使用NameSurname扫描到两个单独的字符串

如何在C宏中确定 struct 中元素的类型?

如何将长字符串转换为较小的缩写,该缩写由第一个字符、最后一个字符和中间的字符数组成?

使用AVX2的英特尔2022编译器的NaN问题&;/fp:FAST

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

进程在写入管道时挂起

OpenSSL:如何将吊销列表与SSL_CTX_LOAD_VERIFY_LOCATIONS一起使用?

S在本文中的价值观到底出了什么问题?

处理来自浏览器的HTTP请求

在C++中允许使用字符作为宏参数

错误...的多个定义(&Q)首先在这里定义&

将 struct 数组写入二进制文件时发生Valgrind错误

如何在C中定义指向函数的指针并将该指针赋给函数?

将某些内容添加到链接列表时,列表中的其他项将使用最后添加的项的名称

使用mmap为N整数分配内存

cs50拼写器分配中的无限循环