一个变量声明中的多个const

Leo*_*Leo 4 c const ansi

我的一位同事在ANSI C中使用const有点疯狂,我想知道你们对它的想法.他写这样的东西,例如:

const uint8* const pt_data
Run Code Online (Sandbox Code Playgroud)

我理解他的目的在哪里,但对我来说,这使得所有这些const的阅读和可维护性变得更加困难.

cni*_*tar 10

它是const指向const数据的指针.

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

它看起来很合理.


Ere*_*ith 7

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
Run Code Online (Sandbox Code Playgroud)

在声明它们时应始终初始化这些指针(除非它们是参数)

const关键字非常适合确保某些内容不会被修改,并且还告诉开发者它不应该.例如,int strlen(const char* str)告诉char您字符串中的数据不会被修改.


Alo*_*ave 5

它是一个指向常量数据的常量指针.
它意味着您无法更改数据(其地址pt_data存储),也无法更改指针(pt_data)以指向其他内容(某些其他地址).

他可能就是这样需要的.