char * const p char const * p const char *p 三个有什么区别?

[定义理解]

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;
}

[运行结果]

jietang@ubuntu:~/src/demo13$ cc test.c -o test
jietang@ubuntu:~/src/demo13$ ./test 
c,m

常量指针p的地址可变(p++),若改变p指向地址内容的值会出现如下错误:

char const *p;
p=str;
*p='n';
jietang@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++;
jietang@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];
jietang@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:10:2: 错误: 向只读变量‘q’赋值





你可能感兴趣的:(Linux,C)