【问题标题】:When is a constant pointer (not a pointer to a constant) in a function prototype required for the code to be correct? [duplicate]何时需要函数原型中的常量指针(而不是指向常量的指针)才能使代码正确? [复制]
【发布时间】:2019-11-21 10:46:40
【问题描述】:

在查看代码时,我偶尔会看到带有常量指针的函数原型,例如:

void Foo(int * const bar);

使用这样的函数的程序员通常不理解他实际看到的内容,而该函数后来被这样使用:

const int bla = 0;
Foo((int* const) &bla);

据我了解,这会导致未定义的行为。在这种情况下,常量指针引起了混乱。

我的问题是:什么时候需要函数原型中的常量指针(不是指向常量的指针)才能使代码正确?

【问题讨论】:

  • 它可以让你在编译时通过修改const指针作为错误来识别错误

标签: c constants


【解决方案1】:

const 关键字仅用于避免在变量被触及时产生编译错误,并在假设变量不变的情况下优化代码。 它从来不是必需的。调用者也完全不感兴趣,因为 C 按值传递所有参数。

const 的两种用法,无论是const int * 还是int * const,都只是程序员和编译器之间的约定。它们从来都不是必需的。

【讨论】:

  • 是指针不会被触动,还是指向的值不会被触动?
  • int *const x;表示指针本身(即变量x本身)不会被修改,而const int *x;表示x指向的数据不会被修改。
  • 你能把这个添加到你的答案中吗?
  • @PaulOgilvie 这不是 OP 所要求的。他们在标题中明确表示“不是指向常量的指针”。
猜你喜欢
  • 1970-01-01
  • 2014-02-23
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多