指针常量本质是一个常量(指针类型的常量),即是指一个指针变量被定义为常量,即指针本身不能被修改,但指向的地址值仍可以改变。具体来说,指针常量在定义时必须进行初始化(指向某个地址或指向NULL),并且一旦初始化之后,指向的地址就不能再被修改了。换句话说,指针常量指向的地址是固定的,但通过这个指针可以修改它所指向的值(如果该值不是常量的话)。
实例:
#include <stdio.h>
int main()
{
//指针常量
int a = 100;
int b = 200;
int* const p = &a;
printf("%d\n",*p);
//p=&b; //非法,改变了指向的地址。
*p = b; //合法,仅仅是修改指向的值。
printf("%d\n",*p);
return 0;
}
常量指针本质是指针(指向常量的指针),指的是指针指向的内容是常量,即不能通过该指针来修改它所指向的值。但是,常量指针本身的值(即它所指向的内存地址)是可以被修改的,即它可以指向另一个地址。
实例:
#include <stdio.h>
int main()
{
//常量指针
int a = 100;
int b = 200;
const int* p = &a;
printf("%d\n",*p);
p=&b; //合法,指向另外一个地址。
//*p = b; //非法,不能通过该指针来修改它所指向的值。
printf("%d\n",*p);
return 0;
}
常量指针常量本质还是个常量,可以理解为是一个指针类型的常量并且指向一个常量,是指针本身和指向的值都不可变的常量。
实例:
#include <stdio.h>
int main()
{
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[3] = {100, 200, 300};
const int * const pt = arr1;
//pt = arr2; //错误:指针地址不能改变
//*pt = arr2[0]; //错误,指针指向的值也不可以改变
for (int i = 0; i < 5;i++){
printf("%d\n", *(pt + i));
}
return 0;
}
