What is the difference between const int*, const int * const, and int const *?(const int*、const int * const 和 int const * 有什么区别?)
问题描述
我总是搞砸如何正确使用 const int*、const int * const 和 int const *.是否有一套规则来定义你能做什么和不能做什么?
I always mess up how to use const int*, const int * const, and int const * correctly. Is there a set of rules defining what you can and cannot do?
我想知道在分配、传递给函数等方面的所有注意事项.
I want to know all the do's and all don'ts in terms of assignments, passing to the functions, etc.
推荐答案
向后阅读(由 顺时针/螺旋规则):
int*- 指向 int 的指针int const *- 指向 const int 的指针int * const- 指向 int 的 const 指针int const * const- 指向 const int 的 const 指针
int*- pointer to intint const *- pointer to const intint * const- const pointer to intint const * const- const pointer to const int
现在第一个 const 可以在类型的任一侧,所以:
Now the first const can be on either side of the type so:
const int *==int const *const int * const==int const * const
const int *==int const *const int * const==int const * const
如果你真的想发疯,你可以这样做:
If you want to go really crazy you can do things like this:
int **- 指向 int 的指针int ** const- 一个指向 int 指针的 const 指针int * const *- 指向 const 的指针,指向 int 的指针int const **- 一个指向 const int 的指针int * const * const- 一个 const 指针,指向一个 const 指针,指向一个 int- ...
int **- pointer to pointer to intint ** const- a const pointer to a pointer to an intint * const *- a pointer to a const pointer to an intint const **- a pointer to a pointer to a const intint * const * const- a const pointer to a const pointer to an int- ...
为了确保我们清楚 const 的含义:
And to make sure we are clear on the meaning of const:
int a = 5, b = 10, c = 15;
const int* foo; // pointer to constant int.
foo = &a; // assignment to where foo points to.
/* dummy statement*/
*foo = 6; // the value of a can´t get changed through the pointer.
foo = &b; // the pointer foo can be changed.
int *const bar = &c; // constant pointer to int
// note, you actually need to set the pointer
// here because you can't change it later ;)
*bar = 16; // the value of c can be changed through the pointer.
/* dummy statement*/
bar = &a; // not possible because bar is a constant pointer.
foo 是一个指向常量整数的变量指针.这使您可以更改指向的内容,但不能更改指向的值.最常见的情况是 C 风格的字符串,其中有一个指向 const char 的指针.您可以更改指向的字符串,但不能更改这些字符串的内容.当字符串本身位于程序的数据段中并且不应更改时,这一点很重要.
foo is a variable pointer to a constant integer. This lets you change what you point to but not the value that you point to. Most often this is seen with C-style strings where you have a pointer to a const char. You may change which string you point to but you can't change the content of these strings. This is important when the string itself is in the data segment of a program and shouldn't be changed.
bar 是指向可以更改的值的常量或固定指针.这就像一个没有额外语法糖的参考.由于这个事实,通常你会使用一个引用来使用 T* const 指针,除非你需要允许 NULL 指针.
bar is a constant or fixed pointer to a value that can be changed. This is like a reference without the extra syntactic sugar. Because of this fact, usually you would use a reference where you would use a T* const pointer unless you need to allow NULL pointers.
这篇关于const int*、const int * const 和 int const * 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:const int*、const int * const 和 int const * 有什么区别?
基础教程推荐
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 常量变量在标题中不起作用 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
