[定义理解]
char* const p; p为指向字符变量的指针,地址不变,地址内容可变
const char *p; p为指向字符变量的指针,地址可变,地址内容不变
char const *p 与const char *p等价。
[记忆方法]
const * p (不管char的位置,中文翻译就是常量的指针, 从左往右读,地址可变,地址内容不变)
- const p (一样从左往右读,指针常量,地址不变,地址内容可变)
const char * const p (指针不能变,指的量也不能变)
[正确示例]
#include "stdio.h"
int main(int argc, char const *argv[])
{
char str[]="abcd";
char const *p;
p=str;
p++;
char* const q=&str[1];
*q='m';
printf("%c,%c\n",*(p+1),*q );
return 0;
}
[运行结果]
lifeihu@ubuntu:~/src/demo13$ cc test.c -o test
lifeihu@ubuntu:~/src/demo13$ ./test
c,m
常量指针p的地址可变(p++),若改变p指向地址内容的值会出现如下错误:
char const *p;
p=str;
*p='n';
lifeihu@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:8:2: 错误: 向只读位置‘*p’赋值
指针常量q的内容可变(*q='m'),若改变q的指向地址会出现如下错误:
char* const q=&str[1];
q++;
lifeihu@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:11:2: 错误: 令只读变量‘q’自增
【注意】对于指针常量char* const q,在定义时必须初始化。否则会出现如下错误:
char* const q;
q=&str[1];
lifeihu@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:10:2: 错误: 向只读变量‘q’赋值