const int *,const int * const和int const *之间有什么区别?

const int *,const int * const和int const *之间有什么区别?

我总是搞砸了怎么用const int*const int * constint const *正确的。是否有一套规则定义了您能做什么和不能做什么?

我想知道在任务,传递到职能等方面所做的所有事情和所有不应做的事情。


鸿蒙传说
浏览 1456回答 4
4回答

宝慕林4294392

向后读(由顺时针/螺旋规则驱动):int* - 指向int的指针int const * - 指向const int的指针int * const - const指向int的指针int const * const - const指向const int的指针现在第一个const可以在类型的任何一侧,所以:const int * == int const *const int * const == int const * const如果你想变得非常疯狂,你可以做这样的事情:int ** - 指向int的指针int ** const - 指向int的指针的const指针int * const * - 指向int的const指针的指针int const ** - 指向const int指针的指针int * const * const - 指向int的const指针的const指针...并确保我们清楚const的含义const int* foo;int *const bar; //note, you actually need to set the pointer                  //here because you can't change it later ;)foo是一个指向常量整数的变量指针。这使您可以更改指向的内容,但不能更改指向的值。大多数情况下会看到C风格的字符串,其中有一个指向a的指针const char。您可以更改指向的字符串,但不能更改这些字符串的内容。当字符串本身位于程序的数据段中且不应更改时,这很重要。bar是一个指向可以更改的值的常量或固定指针。这就像没有额外语法糖的参考。因为这个事实,通常你会使用一个你将使用T* const指针的引用,除非你需要允许NULL指针。

心有法竹

我想这里已经回答了所有问题,但我只想补充一点,你应该小心typedefs!它们不仅仅是文本替换。例如:typedef char *ASTRING;const ASTRING astring;类型astring是char * const,而不是const char *。这是我总是倾向于放在const类型右侧的一个原因,而不是从一开始。

慕后森

几乎所有人都指出:有什么区别const X* p,X* const p和const X* const p?你必须从右到左阅读指针声明。const X* p 表示“p指向一个常数为X的X”:不能通过p更改X对象。X* const p 表示“p是指向非const的X的const指针”:您不能更改指针p本身,但可以通过p更改X对象。const X* const p 表示“p是指向X的常量指针”:您不能更改指针p本身,也不能通过p更改X对象。

ITMISS

常量参考:对变量(此处为int)的引用,它是常量。我们主要将变量作为引用传递,因为引用的大小小于实际值,但是存在副作用,这是因为它就像实际变量的别名。我们可能会通过完全访问别名来意外更改主变量,因此我们将其设置为常量以防止此副作用。int var0 = 0;const int &ptr1 = var0;ptr1 = 8; // Errorvar0 = 6; // OK常量指针一旦常量指针指向变量,它就不能指向任何其他变量。int var1 = 1;int var2 = 0;int *const ptr2 = &var1;ptr2 = &var2; // Error指向常数的指针一个指针,通过它可以不改变它指向的变量的值,这个指针称为指向常量的指针。int const * ptr3 = &var2;*ptr3 = 4; // Error指向常量的常量指针指向常量的常量指针是一个指针,既不能改变它指向的地址,也不能改变保存在该地址的值。int var3 = 0;int var4 = 0;const int * const ptr4 = &var3;*ptr4 = 1;     // Error  ptr4 = &var4; // Error
打开App,查看更多内容
随时随地看视频慕课网APP