C语言const用法详解(带实例)

C语言const用法详解(带实例)const 与 define 区别在 C 语言中 const 常用来定义常量 表示这个常量是不可以被修改的 define 宏定义也可以用来表示一个常量 那么他们有那些区别呢 1 预编译指令只是对值进行简单的替换 不能进行类型检查 2 可以保护被修饰的东西 防止意外修改 增强程序的健壮性 3 编译器通常不为普通 const 常量分配存储空间 而是将它们保存在符号表中 这使得它成为一个编译期间的常量 没有了存储与读内存的操作 使得它的效率也很高 const 作用 1 const 修饰局部变量 constinta

const与define区别

在C语言中const常用来定义常量,表示这个常量是不可以被修改的。define宏定义也可以用来表示一个常量。那么他们有那些区别呢!

1、预编译指令只是对值进行简单的替换,不能进行类型检查

2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性

3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

const作用

1、const修饰局部变量

const int a=1; int const a=1; 

这两种写法是一样的,不过要注意const声明变量后这个变量就不能够在改变,那么在声明的时候就需要进行初始化,否则后面就无法进行修改了。

const char *p ="zxcvbnm"; 
int b=1; const int * a = &b; //常量指针 int * const a = &b; //指针常量 
#include  
     #include  
     int main() { 
    int b=2; const int* a=&b; //*a=5;这样写就是错误 printf("*a=%d\r\n",*a); printf("a=%p\r\n",a); b=3; printf("*a=%d\r\n",*a); printf("a=%p\r\n",a); return 0; } 

运行结果:

2、常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

#include  
     #include  
     int main() { 
    int b=2; int c=4; const int* a=&b; printf("&b=%p\r\n",&b); printf("a=%p\r\n",a); a=&c; printf("*a=%d\r\n",*a); printf("a=%p\r\n",a); b=3; printf("*a=%d\r\n",*a); printf("a=%p\r\n",a); return 0; } 

运行结果:

指针常量:指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改

#include  
     #include  
     int main() { 
    int b=2; int *c=&b; int* const a=&b; printf("&b=%p\r\n",&b); printf("c=%p\r\n",c); printf("*c=%d\r\n",*c); printf("a=%p\r\n",a); printf("*a=%d\r\n",*a); printf("\r\n"); *c=6; printf("c=%p\r\n",c); printf("*c=%d\r\n",*c); printf("a=%p\r\n",a); printf("*a=%d\r\n",*a); printf("\r\n"); b=3; printf("c=%p\r\n",c); printf("*c=%d\r\n",*c); printf("a=%p\r\n",a); printf("*a=%d\r\n",*a); return 0; } 

运行结果:

4、const修饰函数的参数
这点作用就和常量指针,和指针常量一样。

#include  
     #include  
     void fun(const int * n) { 
    int a=1; n=&a; printf("%d\r\n",*n); a=3; printf("%d\r\n",*n); } int main() { 
    int b=2; fun(&b); return 0; } 

运行结果:

#include  
     #include  
     const char * fun(void) { 
    char *p="zxcvbnm"; return p; } int main() { 
    char *b=fun(); printf("%s\r\n",b); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203284.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:10
下一篇 2026年3月19日 下午10:10


相关推荐

  • 角点检测方法_什么叫五点取样法

    角点检测方法_什么叫五点取样法目录原理讲解【1】为何选取角点作为特征?【2】角点的定义:【3】判断角点的方法:【4】Harris角点检测法示例Opencv自带函数:cornerHarris()函数示例程序1示例程序2原理讲解【1】为何选取角点作为特征?角点是一种局部特征。角落上的可区分性特别强,边缘次之,平滑区域则基本没有区分性。【2】角点的定义:【3】判断角点的方法:这里有个细节:将计算的所有方向上的变化……

    2022年10月21日
    3
  • C语言 最长回文子串[通俗易懂]

    C语言 最长回文子串[通俗易懂]描述:输入一个字符串,求其中最长回文子串。子串的含义是:在字符串中连续出现得字符串片段。回文的含义是,正着看和倒着看是相同的,如abba何abbebba。在判断时要求忽略所有的标点和空格,且忽略大小写。但输出时按原样输出(首尾不要输出多余的字符串).输入字符串长度大于等于1小于等于5000.且单独占一行。输入:输入一行字符串。输出:输出所要求的回文子串。样例输入:L…

    2022年6月7日
    58
  • eplan激活码破解步骤win10【2021.7最新】

    (eplan激活码破解步骤win10)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

    2022年3月21日
    1.4K
  • java中的值传递和引用传递的区别?

    java中的值传递和引用传递的区别?1 值传递概念 值传递是指在调用函数时将实际参数复制一份传递到函数中 这样在函数中如果对参数进行修改 将不会影响到实际参数 实例 publicclassM publicstatic String args intnum 10 实际参数 test num System ou

    2026年3月16日
    2
  • mysql 窗口函数排序[通俗易懂]

    mysql 窗口函数排序[通俗易懂]窗口函数rank,dense_rank,row_numberselect*,rank()over(orderby成绩desc)asranking,dense_rank()over(orderby成绩desc)asdese_rank,row_number()over(orderby成绩desc)asrow_numfrom班级

    2026年4月14日
    3
  • Java 实习生(月薪 3k-5k 水平)应具备哪些知识、能力?给学弟学妹们支招

    我10年前在一家外企做Java实习生的时候,就差不多这个水平((月薪3k-5k),10多年过去了,可以稍微把目标放得大一点,比如说8k-10k,我觉得也不是不可能!在一线城市找一份靠谱的实习工作我觉得还是不难的,怕就怕有些学弟学妹盲目乐观,以为能找一份不错的实习工作,结果碰一鼻子灰,最后心灰意冷,可能就转行了。或者盲目悲观,大四了呀,学历不咋滴呀,整天恍恍惚惚的,无心学习,最后也转行了。注意注意,只要现在立刻马上开始按照我说的学习路线开始,就一点不晚。第一,IntellijIDEA、G

    2022年4月10日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号