20170512

函数的参数的哑元和默认值
一、函数参数的哑元
    概念:一个函数的参数,只有类型,没有形参名
    作用:向前兼容函数
    void decode(int key) { }
    void decode(int) { }
    区分函数
    Date date = {2014, 3, 13};
    ++date;
    operator++() {}    //表示前++
    date++;
    operator++(int ) {} //表示后++
二、参数的默认值(缺省参数)
    2.1 作用
    在设计一个函数的参数时,可以给这个参数指定一个值,如果在调用函数时不给这个参数赋值,则参数使用指定的值,如果传入了值,则参数使用传入的值
    简化调用,简化函数的个数
    2.2 举例
    要求两个数大小,函数参数为三个数时,只要第三个数有默认值,就可以只传两个参数,第三个用本身的默认值
    1 #include <iostream>
    2 using namespace std;
    3 int getMax(unsigned int x, unsigned int y, unsigned int z = 0) {
    4
    5 }
    6
    7 int main() {
    8     getMax(1, 2, 0);//我们要求两个数的大小,第三个数没用,但是为了>    和函数匹配,得传最小的0
    9     getMax(2, 1);
   10 }
    2.3 函数缺省函数的注意事项
        不要和重载构成冲突:
        例如:
            int getmax(int x, int y, int z = 0){}
            int getmax(int x, int y) {}
            调用getmax(2, 1);发生冲突,不知道该调用哪个函数
        参数的缺省值,必须靠右(一个参数有默认值,则这个参数右边的所有参数都必须带默认值)
    2.4 设计一个函数,输出整数数组的值(默认输出数组的前五个数据,如果不够五个需要传入数组元素个数,并且默认以‘,‘分隔数据
        可以通过第三个参数指定分隔符号
          1 #include <iostream>
          2 using namespace std;
          3
          4 int printArr(int* arr, unsigned int num = 5, char symbol = ‘,‘) {
          5     for(int i = 0; i <= num - 2; i++) {
          6         cout << arr[i] << symbol;
          7     }
          8     cout << arr[num - 1] << endl;
          9 }
         10 int main() {
         11     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
         12     printArr(arr, 6);
         13     printArr(arr);
         14     printArr(arr, 10);
         15     return 0;
         16 }
        当声明和实现分开时,在声明中指定默认值,在实现中不能指定
          1 #include <iostream>
          2 using namespace std;
          3 void printArr(int* arr, int num = 5, char symbol = ‘,‘);
          4 int main() {
          5     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
          6     printArr(arr, 6);
          7     printArr(arr);
          8     printArr(arr, 10);
          9     printArr(arr, 3, ‘#‘);
         10     return 0;
         11 }
         12
         13 void printArr(int* arr, int num, char symbol) {
         14     for(int i = 0; i <= num - 2; i++) {
         15         cout << arr[i] << symbol;
         16     }
         17     cout << arr[num - 1] << endl;
         18 }
        
三、内联函数
    在函数调用时,直接把函数的二进制代码粘贴过去
    和宏是有区别的,具备函数的一切特性
    调用频繁,函数比较小(100行以内)适合内联
    调用稀少,函数比较大,不适合
    递归无法实现内联
    inline void testline() { }
    inline只是一种请求,请求成功与否看编译器
四、c++中的内存分配
    c中的内存分配 malloc calloc realloc
                  free
    c++中使用
        类型 *指针名 = new 类型名;   delete 指针;
        类型 *指针名 = new 类型名[n]; delete[] 指针名;
        int *parr = new int[5];
        for(int i = 0; i < 5; i++) {
            //*parr++ = i + 1;//典型错误,指针不能乱动,这样做par指向最后一个字节,delete释放的时候找不到内存了
            //parr[i] = i + 1; //正确
            //*(parr + i) = i + 1; //正确
        }
        /*使用delete[]释放掉new[]申请的内存*/
        delete[] parr;
        
    定位内存分配(了解)
            char data[20]; //栈
            int *parr = new int[5]; //堆
            int *parr = new  (data)int[5] //在栈中,这两个内存位置一致,不需要delete释放

时间: 2024-10-22 07:25:37

20170512的相关文章

CSDN日报20170512 ——《程序员,你为什么值这么多钱?》

[程序人生]程序员,你为什么值这么多钱? 作者:瞬息之间 听说一段时间不加薪,人就会开始思考起和工资有关的问题.消费水平又提升了,能力也进步了,经验也更多了,怎么还没涨工资呢? 点击阅读全文 [OS]如何看待 Google 最新的系统 Fuchsia? 作者:stormzhang 想必大家都知道了,前几天 Google 曝光了新 OS Fuchsia 的部分信息与 UI,已经很多人在后台给我留言,让我说说看法,那么趁我还没去美国,就给大家写篇文章普及下,顺便说下我个人对 Fuchsia 系统的期

20170512 Python练习册0001生成激活码

#!/usr/bin/env python# -*-coding:utf-8-*- # 第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),# 使用 Python 如何生成 200 个激活码(或者优惠券)? import stringimport random Key_len = 20Key_all = 200 def base_str(): return (string.ascii_letters + string.digit

用ajax判断用户是否已存在?----2017-05-12

首先在用ajax之前,先说一下JSON: JSON:javascript object notation   js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义json var a = { "one":"111", "two":"222", "three":arr,     -------可以是数组(var arr=new Array(2,3,4)) "fo

问题 1018: C语言程序设计教程(第三版)课后习题6.8

/******************************************************************** @file Main.cpp @date 2017-05-12 @author Zoro_Tiger @brief 问题 1018: C语言程序设计教程(第三版)课后习题6.8 http://www.dotcpp.com/oj/problem1018.html *************************************************

第16篇-JAVA 类加载与反射

第16篇-JAVA 类加载与反射 每篇一句 :敢于弯曲,是为了更坚定的站立 初学心得: 追求远中的欢声笑语,追求远中的结伴同行 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-12| JAVA 类加载与反射 ] 1.类加载 类加载器负责将 .class 文件(可能在磁盘上, 也可能在网络上) 加载到内存中, 并为之生成对应的 java.lang.Class 对象 当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载.连接.初始化三个步骤来对该类进行初始化,如果没

部署应用的小脚本

1 #!/bin/bash 2 # Author : standby 3 # Date : 2017-05-12 4 # Description : Deploy something. 5 6 . /etc/init.d/functions 7 8 # Usage... 9 function Usage() 10 { 11 echo -e "Usage: /bin/sh $0 arg1 arg2\n \ 12 - arg1 like this : data1 | data2 ...\n 13 -

小谈-—ServletConfig对象和servletContext对象

一.servletContext概述 servletContext对象是Servlet三大域对象之一,每个Web应用程序都拥有一个ServletContext对象,该对象是Web应用程序的全局对象或者上下文.Tomcat服务器在启动时,会自动创建一个ServletContext对象,在关闭时,会自动销毁这个ServletContext对象.每个Web应用程序只拥有一个ServletContext对象,ServletContext对象可以在整个Web应用中共享数据资源. 生命周期很长 每个web应

Python 多进程多线编程模板

一.Python 多进程多线程原理介绍 1. Python 全局解释器锁GIL a) Python的全局解释器锁GIL是互斥锁,能够防止本机多个线程一次执行Python字节码:由于CPython的内存管理在线程级别是不安全的(内存泄露),所以这个全局解释器锁是必须的.每个Python进程只能申请使用一个GIL锁,因此Python的多线程虽然是并发的但不能并行处理.Python的解释器每次只能执行一个线程,待GIL锁释放后再执行下一个线程,这样线程轮流被执行. b) Python2.x里,GIL的

进程管理及计划任务

进程的概念: 内核的功用:进程管理,文件系统,网络功能,内存管理, 驱动程序,等 process:运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(process ID,PID)号码被用来标记各个进程,UID, GID和SELinux语境决定对文件系统的存取和访问权限.通常从执行进程的用户来继承 在Centos6以前第一个进程init Centos7是systemd   为父子关系 进程:都是由其父进程创建,使用cow机制,(写时复制) 在没有写之前父子功用同一个空间,之后子进程单独