程序的开发过程

程序

  • 源程序:用源语言写的,有待翻译的程序;
  • 目标程序:源程序通过翻译程序加工以后生成的机器语言程序;
  • 可执行程序:连接目标程序以及库中的某些文件,生成的一个可执行文件,例如Windows系统平台上的.EXE文件。

三种不同类型的翻译程序

  • 汇编程序:将汇编语言源程序翻译成目标程序;
  • 编译程序:将高级语言源程序翻译成目标程序;
  • 解释程序将高级语言源程序翻译成机器指令,边翻译边执行。

注意:字符类型char实际上存储的也是整数。

i++和++i的区别就是:

i++ :先引用,后增加
++i :先增加,后引用

换句话就是:

i++ : 先在i所在的表达式中使用i的当前值,再让i加1
++i : 先让i加1,再在i所在的表达式中使用i的新值

取决于++和i的相对位置:

++在i前面,i先加1,然后在表达式中用i的值;++在i后面,先在表达式中用i的值,然后i再加1。

混合运算时数据类型的转换:

  1. 将一个浮点数赋给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失。
  2. 将一个整数值赋给浮点类型时,小数部分记为0。如果整数所占的空间超过了浮点类型的容量,精度可能有损失。

控制语句

① break

② continue

③ goto(使程序的执行流程跳转到语句标号所指定的语句)

例如可用于跳出多重循环,也可以前跳或者后跳,也可以跳出switch,或者在case之间进行跳转可以想象,它的存在会破坏程序的结构,所以应该少用或不用。

#include<iostream>
using namespace std; int main()
{
int x,sum=0;
L1:cout<<"x=";
cin>>x;
if(x==-1)
goto L2;
else
sum+=x;
goto L1;
L2:cout<<"sum="<<sum<<endl;
}

上述例子中表示j以2作为初始值,类型与i一致。

 函数的定义占内存,函数的声明不占内存。

注意:如果实参表列包括多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左顺序。许多C版本是按自右而左的顺序求值,例如Tubro C++。

#include <stdio.h>
void main()
{
int f(int a,int b); /* 函数声明 */
int i=,p;
p=f(i,++i); /* 函数调用 */
printf("%d\n",p);
}  
int f(int a,int b) /* 函数定义 */
{
int c;
if(a>b) c=;
else if(a==b) c=;
else c=-;
return(c);
} 

对于函数调用

int i = , p;
p = f(i, ++i);

如果按自左至右顺序求实参的值,则函数调用相当于f(2,3) 。如果按自右至左顺序求实参的值,则函数调用相当于f(3,3)。

注意:引用相当于起别名。

运行结果:

  x =5,y=10

  x=10,y=5

函数模版举例:

#include<iostream>
using namespace std;
template <class T> T add(T a,T b)
{
return a+b;
}
int main()
{
cout<<"int_add"<<add(,)<<endl;//生成整型版本的add函数
cout<<"double_add="<<add(10.2,20.5)<<endl;//生成实型版本的add函数
cout<<"char_add="<<add('A','\2')<<endl;//生成字符型版本的add函数
return ;
}

函数的调用

嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义。
然而,C语言不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。

注:全局变量作用于整个工程文件,同一个工程下不同文件中不能重复定义同一个名字的变量,如FILE2.CPP中的int a=201,b=202产生错误,但是全局变量要想在不同的文件中使用,需要在后续文件中使用extern 声明。

存储方式分为两大类:静态存储类和动态存储类。

具体包含四种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期。

函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的(栈),数据存储在动态存储区中。
函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。

例如:
int f(int a) /*定义f函数,a为形参 */
{ auto int b,c=3; /*定义b、c为自 变量 */
…………

关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。

如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。
而对自动变量来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。

  一个程序在编译运行的时候,普通变量存放在栈区STACK,而static会使得变量(如 static int a = 1)存放在DATA,整个内存主要分为四大区:CODE,DATA,STACK,HEAP,

DATA区(存放常量,常量变量,静态变量,静态函数,字符串)特点是不会因为函数调用结束,static修饰的变量和函数而释放,直到整个程序结束才释放。 STACK区的变量与函数,即普通变量经过函数调用完成之后会释放。HEAP区空间由程序员自己规定。

寄存器变量为需频繁调用的变量设置,速度快。缺点;存储空间有限。

如果有一些变量使用频繁(例如在一个函数中执行10000次循环,每次循环中都要引用某局部变量),则为存取变量的值要花费不少时间。
为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。

虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。

静态局部变量举例:

#include<iostream>
using namespace std;
int fun()
{
static int cnt=;//静态局部变量
cnt++;
return cnt;
}
int main()
{
int i,c;
for(i=;i<=;i++)
c=fun();
cout<<c<<endl;//
return ;
}

  sizeof(A):A所占的字节数

注意:形参数组不定义长度。

复习C++_基础、函数、数组、字符串的更多相关文章

  1. PHP 函数(数组字符串)

    函数四要素:  参数  变量   返回值  函数体 函数分类: 1.有参数的函数: function Show() { echo "hello"; } Show(); 2. 有返回 ...

  2. ansible复习笔记_基础-从零到无

    --创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...

  3. -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义

    Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...

  4. php最全基础,数组,函数,超全局变量,时间,回话,文件,php操作mysql

    共享一份学习php最全基础语法知识的笔记 原文链接:http://www.cnblogs.com/oscn/p/3607757.html:略有修改   http://www.cnblogs.com/l ...

  5. PHP基础函数、自定义函数以及数组

    2.10 星期五  我们已经真正开始学习PHP 了,今天的主要内容是php基础函数.自定义函数以及数组, 内容有点碎,但是对于初学者来说比较重要,下面是对今天所讲内容的整理:  1 php的基本语法和 ...

  6. C语言基础 (8) 常用字符串处理函数

    复习 如何调用库函数(别人写好的函数) 1)       头文件:包含指定的头文件,头文件主要包含此函数的声明 2)       函数名字:函数名字必须和头文件声明的名字一样 字符串常用处理函数: 1 ...

  7. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  8. php数组函数,字符串,linux命令

    1>> Linux常用命令一. 文件目录操作命令1. ls命令    命令格式:ls [选项] [目录名]    命令功能:列出目标目录中所有的子目录和文件.2. 命令格式:cd [目录名 ...

  9. ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)

    客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...

随机推荐

  1. centos 通过yum安装GlusterFS

    1.环境 centos 6.5 64 bit glusterfs-3.5 2.配置yum源 http://download.gluster.org/pub/gluster/glusterfs/repo ...

  2. 洛谷P4121 [WC2005]双面棋盘(线段树套并查集)

    传送门 先膜一下大佬->这里 据说这题正解是LCT,然而感觉还是线段树套并查集的更容易理解 我们对于行与行之间用线段树维护,每一行内用并查集暴力枚举 每一行内用并查集暴力枚举连通块这个应该容易理 ...

  3. 在mac上使用sublime text3搭建opencv3开发环境

    安装sublime text3 打开mac终端,安装brew 安装opencv3,终端输入下面的coomand: brew install opencv@3 注意:@3表示安装的版本,如果不加@3,那 ...

  4. 快速搭建angular7 前端开发环境

    第一步:全局安装 Angular CLI (1)打开npm(终端)安装angular-cli 第二步:创造工作区和初始应用 (1)运行命令 ng new my-app 第三步:启动开发服务器 (1)c ...

  5. 洛谷P5058 [ZJOI2004]嗅探器

    题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大 ...

  6. eclipse对于虚拟内存的溢出处理

    第一个配置:-Xms1024m -Xmx2048m 第二个配置: 第二个配置:-XX:MaxPermSize=1024m 第三个配置就是eclipse安装包中的eclipse.ini文件 -Xms51 ...

  7. web应用,http协议简介,web框架

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  8. postgresql 导出csv格式的数据后使用excel打开中文乱码的问题

    两种方法: 1>使用excel 的自文本导入功能,具体方法: 1) 打开 Excel 2) 执行“数据”->“自文本” 3) 选择 CSV 文件,出现文本导入向导 4) 选择“分隔符号”, ...

  9. eslint规则 中文备注

    { "ecmaFeatures": {}, "rules": { "no-alert": 0,//禁止使用alert confirm pro ...

  10. Unity Destroy和DestroyImmediate

    Destroy(Object obj, float t = 0.0F); 删除一个游戏对象,组件或者资源. 物体obj现在被销毁或在指定了t时间过后销毁.如果obj是组件,它将从GameObject销 ...