zoukankan      html  css  js  c++  java
  • 小小const有着大作用

    先看一个例子

    void  fun(char *dest_str,const char *src_str){
            strcpy(dest_str,src_str);
    }
    int main(void)
    {
        char dest_str[10]={0};
        char src_str[]={"hello world"};
        fun(dest_str,src_str);
    
        return 0;
    }

    引出了一个思考,fun的第一个参数不加const,为什么第二个要加呢。

    那是因为,fun函数的第一个新参是为了被修改,返回被复制后的字符串,

    第二个参数是被复制字符串的源,这个数组是不能被修改的。

    因为传递的是地址,存在被修改的风险,所以加了cosnt修饰,表明src_str指向的是”常量“不能被修改。

    函数传参中为什么使用const指针

    因为,函数传递地址遵循两个原则,一个是修改原则,然后是效率原则。如何实现这两个原则?

    修改原则:利用传参来实现函数的返回值,一般情况下,如果是为了得到返回值,我们就传递地址,否则就传递普通值。

    效率原则:对于数组和结构体来说,为了提高传参的效率,基本传递都是地址,传递地址就有可能被修改的风险,

         但问题是有些传参只是使用其内容而不是要修改,这时候我们就可以加入const来锁定了。

    再看看const的用法

    既然说到了函数,以及传参

    那函数为什么需要传参和返回值?

    我们需要知道输入型参数和输出型参数

    函数传参和返回值的多种实现方式

      1:以形参和返回值方式实现(提高封装性)

     

      2.通过全局变量方式实现(提高效率)

    两种方法各有好处吗,但我们为了函数的封装性,封装性才是很重要的,大部分情况下都是用第一种。

    当使用了传参来实现函数的返回值的时候,函数的真正返回值,在绝大多数情况下,都是通过返回0或-1,来表明函数是执行成功或者失败。

    在c语言的库函数和linux的系统函数中,大多都是这种情况,真正的返回值都是通过传参来实现的。

    总结:形参里面,凡是只使用值的,我们都称号之为输入型参数,目的是为了传递函数需要用到的数值,如果这些参数里面涉及指针的时候(主要是数组和结构体),必须加入const修饰,防止被修改。如果希望通过形参返回某个值的时候,称为输出型参数,而且传递的必须是地址(指针),并且不能加const修饰。

  • 相关阅读:
    你以为在用SharePoint但事实上不是
    python 站点爬虫 下载在线盗墓笔记小说到本地的脚本
    CF 552C 进制转换
    ArcGIS制图——多图层道路压盖处理
    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
    ANTLR4权威參考手冊(一)
    Codeforces Round #270--B. Design Tutorial: Learn from Life
    二叉树近期公共父节点
    for循环遍历字符串的还有一种方法
    Android学习笔记技巧之垂直和水平滚动视图
  • 原文地址:https://www.cnblogs.com/wulianwangaxing/p/15004220.html
Copyright © 2011-2022 走看看