const int*、const int*const和int const*之间的区别是什么?

我总是搞不清楚如何正确使用const int*const int*const,以及int const*。有没有一套规则来定义你能做什么和不能做什么

我想知道在作业、传递到函数等方面的所有注意事项

向后阅读(按顺时针/螺旋线规则驱动):

  • int*-指向int的指针
  • int-const*-指向常量int的指针
  • int*const-指向int的const指针
  • int const*const-指向const int的const指针

现在,第一个常量可以位于类型的任一侧,因此:

  • int-const*=int-const*
  • 常量int*const=常量int*const

如果你真的想发疯,你可以这样做:

  • int**-指向int的指针
  • int**const-指向int的指针的常量指针
  • int*const*-指向int的常量指针
  • int-const**-指向常量int的指针
  • int*const*const-指向int的常量指针的常量指针

为了确保我们清楚地理解const的含义:

inta=5,b=10,c=15;
常量int*foo;//指向常量int的指针。
foo=&a、 //分配到foo指向的位置。
/*伪语句*/
*foo=6;//a的值不能通过指针更改。
foo=&b、 //指针foo可以更改。
int*常数条=&c、 //指向int的常量指针
//注意,实际上需要设置指针
//这里,因为您以后无法更改;)
*巴=16;//可以通过指针更改c的值。
/*伪语句*/
巴=&a、 //不可能,因为bar是一个常量指针。

foo是指向常量整数的变量指针。这允许您更改所指向的内容,但不更改所指向的值。最常见的情况是C样式的字符串,其中有一个指向常量char的指针。您可以更改指向的字符串,但不能更改这些字符串的内容。当字符串本身位于程序的数据段中且不应更改时,这一点很重要

bar是指向可更改值的常量或固定指针。这就像一个没有额外语法糖的引用。由于这一事实,除非需要允许NULL指针,否则通常会使用引用,在引用中使用T*const指针

发表评论