我正在学习 c 并试图弄清楚指针是如何工作的。 我只是好奇这两个声明之间的区别是什么:
int i; int *const cip = &i; int const *cip =&i;
如果遗漏了什么,请随时告诉我,在此先感谢。
本声明
int *const cip = &i;
声明一个指向 int 类型对象的常量指针。这意味着您不能更改足尖的值。例如,在这个声明之后你不会知道
cip = &other_i;
在这个声明中
int const *cip =&i;
声明了一个指向常量数据的指针。指针本身可能会改变,但指针指向的数据可能不会改变。所以你可能也不写例如
*cip = 10;
最后这个声明
int const * const cip = &i;
声明一个指向常量数据的常量指针。
注意如果你声明一个函数像
void f( int * const cip );
下面的函数声明
void f( int * cip );
声明相同的函数,因为在函数声明中忽略了 const。然而,它在函数定义中被考虑在内。
如果你将像这样定义函数
void f( int * const cip )
{
//...
}
然后在函数内你不能改变指针。另一方面,如果您将像
这样定义函数void f( int * cip )
{
//...
}
然后你可以改变函数内的指针。