我总是搞不清楚如何正确使用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
指针