C高级之指针(三)

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不可改写。


猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/80179635
今日推荐