参考博客:https://www.cnblogs.com/bianchengzhuji/p/10335837.html

  const是constant的简写,是不变的意思。但并不是说它修饰常量,而是说它限定一个变量为只读。但是并非真正意义上的只读

  1、看个例子1:

#include <stdio.h>
int main(void)
{
// int num=10;
// num=9;
// printf("%d",num);
// return 0;
int a=;
int b=;
const int *p=&a;
printf("%d",*p);
}

输出:9

p是一个指向int类型的const值,与 int const *p等价

  2、例子2:

#include <stdio.h>
int main(void)
{
const int num=;
num=;
printf("%d",num);
return ;
// int a=9;
// int b=8;
// const int *p=&a;
// printf("%d",*p);
}

报错:

C:\Users\xinhao\Documents\test01.c: In function 'main':
C:\Users\xinhao\Documents\test01.c:5:5: error: assignment of read-only variable 'num'

报错原因是num这个变量是只读的,强行num=9就会报错

  3、例子3:

#include<stdio.h>
void myPrint(const char *str);
void myPrint(const char *str)
{
str[] = 'H';
printf("my print:%s\n",str);
}
int main(void)
{
char str[] = "hello world";
myPrint(str);
return ;
}

报错:

C:\Users\xinhao\Documents\test01.c: In function 'myPrint':
C:\Users\xinhao\Documents\test01.c:5:12: error: assignment of read-only location '*str'
str[0] = 'H';

报错原因是myPrint函数修改传入的字符串内容,因此入参使用了const限定符,表明传入的字符串是只读的,因此,如果myPrint函数内部如果尝试对str进行修改,将会报错

我们自己在编码过程中,如果确定传入的指针参数仅用于访问数据,那么应该将其声明为一个指向const限定类型的指针,避免函数内部对数据进行意外地修改

  4、例子4:

#include <stdio.h>
int main(void)
{
const int a = ;
int *p = &a;
*p = ;
printf("%d\n",a);
return ;
}

此时编译器给了个warring:

C:\Users\xinhao\Documents\test01.c: In function 'main':
C:\Users\xinhao\Documents\test01.c:5:14: warning: initialization discards 'const' qualifier from pointer target type
int *p = &a;

运行输出:2019

  5、在a文件中定义,其他文件中使用外部声明

a文件中:const int ARR={1,2,3,4,5,6,7,8,9} //定义int数组

b文件中:extern const int ARR={1,2,3,4,5,6,7,8,9}  //这里不能对ARR赋值

  6、在a文件中定义,并使用static修饰,b文件包含a文件

a文件中:static const int ARR={1,2,3,4,5,6,7,8,9} //定义int数组

b文件中:#include<a.h>//后面可以使用ARR

C语言:const关键字用法的更多相关文章

  1. C语言学习及应用笔记之三:C语言const关键字及其使用

    在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我 ...

  2. C++const关键字用法

    const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进 ...

  3. C++ const关键字用法详解

    1const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 事实上这个概念谁都有只是三种声明方式非常相似很容易记混. Bjarne在他的T ...

  4. C/C++经典面试题1,const关键字用法总结

    本文主要说明了const关键字的作用,包括了用于对数组,指针与类相关的修饰方法,作为笔记总结使用.若有错误与不足,欢迎指正. const关键字 用于修饰一个常类型,常类型的变量或对象的值无法被改变,即 ...

  5. C语言const关键字的作用

    1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #include ...

  6. C++中const关键字用法

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  7. C++中const关键字用法总结

    看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧. 1) const与变量 在变量的定义前加上 const 修饰符即可完成const对象的创建. const int ...

  8. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  9. 【三支火把】---C语言const用法总结

    C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...

随机推荐

  1. JAVA 16bit CRC_CCITT

    JAVA 16bit CRC_CCITT public class CRC_CCITT { static int CRC16_ccitt_table[] = { 0x0000, 0x1189, 0x2 ...

  2. Eureka停更了?试试Zookpper和Consul

    在Spring Cloud Netflix中使用Eureak作为注册中心,但是Eureka2.0停止更新,Eureka1.0 进入了维护状态.就像win7一样,同样可以用,但是官方对于新出现的问题并不 ...

  3. react-native app 屏幕适配方案(按照设计稿像素大小写就行)

    import React, { Component,PropTypes } from 'react'; import { Dimensions,PixelRatio,Platform,StatusBa ...

  4. 网络工程师和Linux运维工程师有什么区别?学哪个比较好?

    网络工程师和Linux运维工程师有什么区别?学哪个比较好? 机缘巧合下,我进入了一家从事vpn与系统集成的公司,很感谢公司能留下我这个非网络工程专业的毕业生,从对网络一窍不通,慢慢可以自己独立完成工作 ...

  5. 利用border-radius画椭圆

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. js Vquery

    // JavaScript Document function myAddEvent(obj,sEv,fn){ alert('fn:'+fn); if(obj.attachEvent){ obj.at ...

  7. SpringBoot入门系列(七)Spring Boot整合Redis缓存

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...

  8. (转)GNU风格ARM汇编语法指南(非常详细)5

    原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010111482417545/ 6.GNU汇编程序中的常数 <1>    十 ...

  9. isEmpty 判空函数 内部分别判断是 null 空数组 等

    import { oneOf, isEmpty } from '@/libs/tools' export const isEmpty = (value) => { if (value == nu ...

  10. 解决vue在控制台的 NavigationDuplicated 报错

    解决问题: 点击相同的链接,会有一个重复key的报错 const originalPush = Router.prototype.push Router.prototype.push = functi ...