Day10

  1. 第六章函数与递回,强调的是函式原型(function prototype)又称为函式宣告(function declaration)会告知编译气函式的名称, 回传值型别, 参数数目, 参数型别还有最重要的顺序,prototype或declaration跟definition的差别可以参考wiki提供的范例。
#include <stdio.h>
int MyFunction(int n);  /* Prototype or declaration */

int main( void )  /* Calling function */{
  printf("%d\n", MyFunction(6));  /* Error: forgot argument to MyFunction */
  return 0;
}

int MyFunction( int n )  /* Called function definition */{
  if (n == 0){
    return 1;
  }
  else{
    return n * MyFunction(n - 1);
  }
}
  1. 强制转型(coercion of argument)提到在C++中类型众多short, int , float, double, unsigned int, 下往上转当然没问题只是多花记忆体空间但上往下转比如: double转成int或转成unsigned int就可能造成资料丢失问题。

  2. 一般说我们说bool类型的值非True即Flase,int类型的值介於-2,147,483,648 至 2,147,483,647,但我们也可以使用enum自行定义类型例如月份: enum Months { JAN=1, FEB, MAR, APR, MAY, JUN, AUG, SEP, OCT, NOV, DEC};

  3. 三个储存关键字auto, register, static,函式中的变数预设是auto当函式存在时存在,函式结束时根据最小授权原则principle of privilege会自动收回记忆体空间,以现今的语言来说C++已经是运行时最快的但在一些追求极致速度的系统中例如:交易系统C++还有一个关键字register可将变数存放於CPU的暂存器(register)不仅增加读取速度更节省变数在register与memory间的反覆传输,运算速度整个Level Up,当然CPU的暂存器是弥足珍贵的所以这是一种建议性质关键字当CPU的暂存器空间不足还是会被丢回memory。

  4. 预设情况下当函数生命周期结束变数也会跟着一起被回收,如果想要变数生存在整个程序执行的期间就可以使用全域变数(Global var),然全域变数是所有函数都可以读取,全域变数满天飞常常是造成问题的根源,比较好的方式对区域变数使用static关键字进行最小授权。值得注意的是static用在全域变数或函式名称时有不同用意。

  5. 有句话说「递回(recurse)只应天上有,凡人该当用回圈(iterate)」,确实比起回圈递回的使用更加困难,但也有些好处

  • 节省记忆体空间
  • "通常"比较快
  • 但要小心递回次数免得stack overflow

反正像我这种凡人只有在研究所考试时写河内塔, 求最大公因数等经典题目,工作後就很少遇到了就不多做介绍。


<<:  【Day 7】Google Apps Script - 使用 Google Docs 撰写 Demo 用的 API 文件

>>:  找LeetCode上简单的题目来撑过30天啦(DAY7)

【基础影像应用篇】DAY3.物件辨识模型建立流程

开始在今日的学习前,让我们先来笔记一下此章节的学习重点吧! MusesAI小精灵带您了解影像辨识的流...

使用Emmet省下泡一杯咖啡的时间(HTML篇)

使用Emmet省下泡一杯咖啡的时间 (HTML篇) 效率满点的好工具 为什麽而学? 前身是Zen c...

Day28 Networking & http

上一篇讲完如何处理已经得到的资讯数据,今天来看看我们是如何与Web 服务器进行通信的 首先添加依赖:...

Day61 (Vue)

影片Vue01 1.Vue (Part_1 > Lab_HelloVueJS > hel...

第十二天:初探 Gradle 任务

任务(Task)是 Gradle 运行时的基本单位,基本上所有我们输入的 Gradle 指令都是对应...