【问题标题】:Quick clarification on const pointers [duplicate]快速澄清 const 指针 [重复]
【发布时间】:2014-04-15 15:02:17
【问题描述】:

这应该是一个非常简单的问题。我正在复习我的 C 语言并想确保我正确理解了 const 指针。

假设我有一个函数static void penv(const char * const * envp);我认为这读作“penv 将指针 envp 指向一个指向 const char 的 const 指针”。这是正确的吗?

【问题讨论】:

  • 我的建议是避免直接使用const 指针。而是编写 typedef,例如 typedef const char* LPCSTR;。乍一看,什么是 const 什么不是,一目了然。清晰的代码通常是最重要的。

标签: c pointers constants


【解决方案1】:

规则说 const 应该适用于它之前的内容,但是有一个语法糖:

const char

等价于

char const

因此读数是:

“penv 接受一个指向常量的指针,指向一个常量 char”

所以你是对的:)

【讨论】:

  • 很好,感谢您的帮助。
【解决方案2】:

当你说“常量指针”时,不清楚你的意思是指针是常量,还是它指向的东西。

只需向后阅读类型(并意识到const charchar const 是同一个东西。

在这种情况下,envp 是一个指向常数的指针(不是常数) 指向常数 char 的指针。

envp 可以设置为指向别处,但它指向的指针不能修改,它们指向的char(s) 也不能修改。

【讨论】:

    【解决方案3】:

    是的,你是对的。

    诀窍是向后阅读声明(从右到左):

    static void penv(const char * const * envp);
    

    这里,envp 是一个指针 (const char * const *),它指向一个常量指针 (const char * const),它指向一个常量字符 (const char)。

    【讨论】:

    • 仅供参考,动词是“指向”,而不是“指向指针”
    • @pat 已修复。谢谢。 :P
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多