int * const(变量名)和int const *(变量名)有什么区别?[duplicate]

mwyxok5s  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(141)

此问题在此处已有答案

const usage with pointers in C(6个答案)
2天前关闭。
我正在学习c语言,并试图弄清楚指针是如何工作的。我只是好奇这两个声明有什么区别:int i; int *const cip = &i; int const *cip =&i;
如果我遗漏了什么,请随时告诉我,先谢了.

oxcyiej7

oxcyiej71#

本声明

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。但是,在函数定义中会考虑限定符const
如果将函数定义为

void f( int * const cip )
{
    //...
}

则在函数中不能更改指针。另一方面,如果将函数定义为

void f( int * cip )
{
    //...
}

那么你可以改变函数中的指针。

相关问题