Const
const关键字修饰变量,表示该变量不可修改。
指针变量也是变量,因此也可以使用const关键字修饰。const关键字修饰指针变量常用的有2种用法。
用法1. const <数据类型> *<指针变量名>
例如const char *src;
说明:const 在 数据类型 前,助记方式:const 在 * 前, 表示该指针指向的内容不可修改。
示例:
#include <stdio.h>
int main(int argc, const char *argv[])
{
inta = 1;
constint * p = NULL;
p= &a;
*p= 2;
return0;
}
编译器报错如下:
const.c:8:2: error: assignment of read-onlylocation ‘*p’,*p = 2;
报错原因是因为 *p不可改写。
C库函数中,常把字符串操作函数的形参设为const类型以保护数据。如:
char *strcpy(char *dest, const char *src);
字符指针 src 前加 const 表示指针src 指向的字符串不可更改。
示例:
char *strcpy_simu(char *dest, const char*src)
{
*src= 'A';
}
编译器报错如下:
const1.c:21:2: error: assignment ofread-only location ‘*src’,*src = 'A';
报错原因是因为 指针src指向的字符串不可改写,就达到保护源字符串的目的。
用法2. <数据类型> *const <指针变量名>
例如int *const a;
说明:const 在 数据类型 后,助记方式:const 在 * 后, 表示该指针本身不可修改。
#include <stdio.h>
int main(int argc, const char *argv[])
{
inta = 1;
intb = 2;
int*const p = &a;
*p= 3;
p= &b;
return0;
}
编译器报错如下:
const2.c:11:2: error: assignment ofread-only variable ‘p’,p = &b;
从编译器报错知道:*p可改写, p不可改写。