我说的不是指向常量值的指针,而是常量指针本身.

我正在学习C和C++,超越了基本的东西,直到今天我才意识到指针是通过值传递给函数的,这是有意义的.

那么,有一个函数头的意义是什么呢

void foo(int* const ptr);

在这样一个函数中,你不能让ptr指向其他东西,因为它是常量,你不想修改它,但是像这样的函数:

void foo(int* ptr);

工作也一样好!因为指针是以任何方式复制的,即使修改了副本,调用方中的指针也不会受到影响.那么const的优势是什么呢?

推荐答案

const是一个工具,你应该用它来追求一个非常重要的C++概念:

通过让编译器执行您的意思,在编译时而不是运行时发现bug.

尽管添加const不会改变功能,但是当您正在做一些您不想做的事情时,添加const会生成一个编译器错误.想象一下下面的打字错误:

void foo(int* ptr)
{
    ptr = 0;// oops, I meant *ptr = 0
}

如果您使用int* const,这将生成一个编译器错误,因为您正在将该值更改为ptr.一般来说,通过语法添加限制是一件好事.只是不要走得太远——你举的例子是一个大多数人都不会费心使用const的例子.

C++相关问答推荐

在Intel HD图形上使用SPIR-V但在NVIDIA上不使用SPIR-V时,GLSL统一名称为空

为什么这个gcc迂腐的人忽视了扩展?

C++ cout打印顺序与C print相比

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

InetPton()函数无效的IP地址

在32位处理器上优化53—32位模计算>

来自stdarg.h的c中的va_args无法正常工作<>

SDL 2.0-从数组渲染纹理

调用mProtection将堆栈上的内存设置为只读,直接导致程序SIGSEGV

如何使用libgpio(d)为Raspberry Pi编译C程序?

理解bzip2的BZ2_解压缩函数中的状态重新分配

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

为什么这个分配做得不好呢?

错误:字符串在C中获得意外输出

如何修复我的qsort()算法?它每次都给出不同的结果

Fscanf打印除退出C代码为1的程序外的所有内容

&stdbool.h&q;在嵌入式系统中的使用

可以';t从A9G模块拨打电话

为什么这个代码的最后一次迭代不能正常工作?

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值