C语言 一个变量声明中有多个常量

64jmpszr  于 2023-03-22  发布在  其他
关注(0)|答案(4)|浏览(105)

我的一个同事对ANSI C中的const有点疯狂,我想知道你们对此的看法。他写了这样的东西,例如:

const uint8* const pt_data

我理解他的意思,但对我来说,到处都是这些常量,这使得阅读和可维护性变得更加困难。

dzhpxtsq

dzhpxtsq1#

它是一个指向const数据的const指针。

  • 第一个const防止*pt_data = 10;
  • 第二个const可防止pt_data = stuff;

它看起来像是相当合法的。

xa9qqrwz

xa9qqrwz2#

const总是指向其右边的单词,除非它位于行的末尾,否则它指向项目本身(在高级语言中)

const char* str; //This is a pointer to read-only char data
                 //Read as to (const char)* str;
                 //Thus :
                 //   *str = 'a';
                 //Is forbidden

char* const str; //This is a read-only pointer to a char data
                 //Read as char* (const str);
                 //Thus :
                 //   str = &a;
                 //Is forbidden

const char* const str; //This is a read-only pointer to read-only char data
                       //Read as (const char)* (const str);
                       //Thus :
                       //    str = &a
                       //  and
                       //    *str = 'a';
                       //Is forbidden

在声明这些指针时,应始终初始化它们(除非它们是参数)
const关键字在确保某些内容不会被修改方面非常出色,同时也告诉开发人员它不应该被修改。例如,int strlen(const char* str)告诉你字符串中的char数据无论如何都不会被修改。

noj0wjuj

noj0wjuj3#

它是一个指向常量数据的常量指针。
这意味着你不能改变数据(其地址pt_data存储),也不能改变指针(pt_data)指向其他东西(其他地址)。
他可能需要这样。

ovfsdjhp

ovfsdjhp4#

如果从变量名开始,逆时针方向,pt_data是指向uint8const指针,也就是const
请参见以下原始ASCII图像:

,--------------------------------.
  |                                |
  |     ,------------------------. |
  |     |                        | |
  |     |   ,------------------. | |
  |     |   |                  | | |
  |     |   |    ,-----------. | | |
  |     |   |    |           | | | |
const uint8 * const pt_data; | | | |
        |   |    |     |     | | | |
        |   |    |     `-----' | | |
        |   |    |             | | |
        |   |    `-------------' | |
        |   |                    | |
        |   `--------------------' |
        |                          |
        `--------------------------'

自从多年前我在一本旧的C书中看到这个方案以来,它帮助我理解了复杂的声明。

相关问题