常量指针、指针常量、指向常量的指针常量
1.常量指针
❶全称:指向一个常量的指针,核心为指针。即一旦指向一个地址,该地址的值不能通过该指针来修改(但可经由指向的变量间接修改);可以更改该指针的值(更改指针指向的地址)。
❷定义: const 在“*”左侧。const int *p int const *p
❸使用:
int a = 5; const int b = 8; const int *c = &a; //合法 *c = 6; // 非法。但可间接修改c指向的对象的值:a = 6; const int *d = &b; // 更改地址,合法
❹函数形参为常量指针但可接受非常量字符串。目的在于限制了外部变量在子函数内部被更改。 int strcmp(const char *str1, const char *str2);
2.指针常量
❶全称:指针类型常量(地址不能更改),核心为常量,即值为常量的指针。即一旦指向一个地址,不容许修改指针值(更改指向地址);但可以经过指针更改地址存储的内容。
❷定义:const 在*右侧 。int *const b。
注意因为为常量,声明时必须赋给初值,一旦赋值,不可变更。
❸使用:
char *a = "abcde1234"; char *b = "bcde"; char *const c = &a; a[0] = 'x'; // 更改内容,合法。 *c[0] = 'x' // 更改内容,合法。
3.指向常量的常量指针
❶全称:指针指向存储常量的常年地址。指针指向地址不能更改,地址的存储内容也不能更改
❷定义和使用:
const int a = 25;
const int * const b = &a;
4.总结
char *a = "abcde1234"; const char *b = "bcde"; // b是常量指针 char *const c = &a; // c指针常量 const char *const d = &b; // d是指向常量的指针常量❶ b是指向常量的指针变量,当b指向别的字符串,d仍然指向b初始的字符串。
❷ b此处静态编译理解成字符串常量指针,不能通过指针b更改内容。
char a[] = "hello"; char b[] = "world"; const char *p1 = a; char* const p2 = b;
对于以上定义 p1++即移动指针合法,但是修改不合法。对于p2, *p2='c'即修改合法,但是移动p2不合法。
本文参考: