我想知道两者的区别

const int* ptr;

and

int * const ptr; 

以及它是如何工作的。

我很难理解或记住这个。 请帮助。


当前回答

const int * ptr;

意味着指向的数据是常量和不可变的,但指针不是。

int * const ptr;

意味着指针是常量且不可变的,但所指向的数据不是。

其他回答

请参考以下链接,以更好地了解Const指针和常量指针之间的区别。

常量指针与固定值上的指针

int i;
int j;

int * const ptr1 = &i;

编译器会阻止你修改ptr1。

const int * ptr2 = &i;

编译器会阻止你修改*ptr2。

ptr1 = &j; // error
*ptr1 = 7; // ok

ptr2 = &j; // ok
*ptr2 = 7; // error

注意,你仍然可以修改*ptr2,只是不能直接输入*ptr2:

i = 4;
printf("before: %d\n", *ptr2); // prints 4
i = 5;
printf("after: %d\n", *ptr2); // prints 5
*ptr2 = 6; // still an error

你也可以同时拥有一个指针:

const int * const ptr3 = &i;

ptr3 = &j; // error
*ptr3 = 7; // error

Const int* ptr;这里假设*ptr是常数,*ptr不能再改变

Int * const ptr;而在这里,PTR是一个常数,不能再改变

const int* ptr;

是指向常量(content)的指针。您可以修改指针。例如,ptr = NULL, ptr++,但修改内容是不可能的。

int * const ptr;

是一个常量指针。相反的情况是可能的。你不允许修改指针,但是你可以修改它所指向的内容,例如*ptr += 5。

const int * ptr;

意味着指向的数据是常量和不可变的,但指针不是。

int * const ptr;

意味着指针是常量且不可变的,但所指向的数据不是。