1、const char* p(char const *p)
保护的是指针指向的数据,不能通过该指针修改数据。
错误例子:
#include <stdio.h>
int main()
{
char str[] = "hehe";
const char* p = str;
//str[0] = 'a';
p[0] = 'a';
return 0;
}
运行结果:
test.c: 在函数‘main’中:
test.c:8:2: 错误: 向只读位置‘*p’赋值
注意:只是不能通过该指针修改数据,但是把p[0] = 'a';
注释了,然后通过//str[0] = 'a';
这条语句依旧能够修改str的值。
2、char* const p
保护的是指针变量
错误例子:
#include <stdio.h>
int main()
{
char str[] = "hehe";
char str2[] = "haha";
char* const p = str;
//p[0] = 'a';
p = str2;
return 0;
}
运行结果:
test.c: 在函数‘main’中:
test.c:9:2: 错误: 向只读变量‘p’赋值
注意:只能不能修改指针变量的值,但是可以通过//p[0] = 'a';
这条语句修改str的值。
3、const char* const p(char const * const p)
既保护指针变量又保护指针变量所指向的数据,也就是说不能通过该指针变量修改数据,也不能改变该指针的值。
错误例子:
#include <stdio.h>
int main()
{
char str[] = "hehe";
char str2[] = "haha";
const char* const p = str;
p[0] = 'a';
p = str2;
return 0;
}
运行结果:
test.c: 在函数‘main’中:
test.c:8:2: 错误: 向只读位置‘*p’赋值
test.c:9:2: 错误: 向只读变量‘p’赋值