常量指针、指针常量和指向常量的指针常量
C语言中,常量指针、指针常量和指向常量的指针常量这三个概念容易混淆,今天我们来分析下这三个概念分别代表的含义。
常量指针
- 常量指针本质上是指针,常量来修饰它,表示这个指针是一个指向常量的指针(变量)。
- 指针指向的对象是常量,那么这个对象不能被更改。
- const在*左边,指针变量指向常量。
案例:
#include <stdio.h>
int main() {
const int a = 5;
const int b = 6;
const int *c = &a;//常量指针(表示一)(指向常量的指针;指针可以改变,指针指向的对象不能被改变)
// int const *c = &a;//常量指针(表示二)(指向常量的指针;指针可以改变,指针指向的对象不能被改变)
c = &b; //正确,c可以被重新赋值
*c = b; //错误,因为他改变的是p所指向的变量的值
return 0;
}
指针常量
- 指针常量的本质是一个常量,并且使用指针来修饰它,说明这个常量的值应该是一个指针。
- const在*右边,指针常量指向变量。
案例:
#include <stdio.h>
int main() {
const int a = 5;
const int b = 6;
int *const c = &a;//指针常量(指针类型的常量;指针不能改变,指针指向的对象可以改变)
c = &b; //错误,指针常量是指该指针指向的地址是不可更改的
*c = b; //正确,指针常量指向的地址不可更改,但是地址中的变量是可以进行更改的
return 0;
}
指向常量的指针常量
- 指向常量的指针常量本质是一个常量,并且他指向的对象也是一个常量。
- const在*两边,指针常量指向常量。
案例:
#include <stdio.h>
int main() {
const int a = 5;
const int b = 6;
const int *const c = &a;//指向常量的指针常量(指针不能改变,指针指向的对象不能改变)
c = &b; //错误,该指针指向的地址是不可更改的
*c = b; //错误,该指针指向一个常量,不能更改
return 0;
}