C++语法一二
写在前面(C++和java的一些区别):
(1) C++中数组的定义为 int a[8];而在java中一般定义为int[] a=new int[8];如果定义的时候进行初始话,也可以缺省数组大小。
(2) C++中函数和变量不能独立于类而存在,函数外的变量称为全局变量,其作用域为整个文件;java中变量和函数都必须依附于类而存在,称为成员变量或者成员函数
(3) c++中函数可以通过指针作为其他函数的参数,java中函数不能作为参数
(4) java中的数组定义 int[] a 或者int a[]; c和c++中采用的是int a[];相对来说 虽然后面一种更符合c的习惯,但是前者从形式上看起来更合理
一、 字符型常量和字符串常量
字符型常量'定界,字符串常量"定界。
字符常量占用1个字节,字符串常量需要保存在字符数组中,'\0'多占用一个存储单位。
char范围-128-127;unsigned char 表示0-255.可以和整数混合运算,字符串常量则不可
二、变量声明、定义和初始化;变量的作用域、生命周期
变量定义是指生命变量名称、数据类型和存储类型
初始化是指为变量赋值。
全局变量:函数外定义的变量
局部变量:函数内部定义。
作用域分类:块级、函数级、类级、文件级、程序级
生命周期分类:和作用域同级别的,和作用域不同级别的
存储类型分类:(auto,register,static,extern)。
系统存储区分类:代码区(存放可执行代码),常数存储区(存放程序的字符串常量和const常量),静态存储区(全局变量和静态局部变量),动态存储区(堆栈,存放局部变量和形式参数),堆或者堆块(自由存储区,程序可以动态分配内存)
全局变量具有文件级作用域和与整个程序执行期相同的生命期。
局部变量具有块级和函数级作用域和与作用域相同的生命周期。
全局变量的存储类型(extern,static)将影响其作用域。默认其作用域为文件级别,进行extern可以将其作用域扩展到程序级别。分两种情况,如果在同一个文件中对全局变量进行extern说明,则变量定义可以在使用之后。如果在同一个程序的其他文件中将另一个文件中定义的全局变量进行extern说明,则全局变量可以在这两个文件中使用。若用static声明,那么全局变量的作用域将被限制在文件内,哪怕其他文件中进行了extern声明。
局部变量的存储类型(extern不能用来说明局部变量,只是用来声明全局变量,static修饰的全局变量或者局部变量叫做静态变量)影响其生命周期,static型局部变量保持作用域不变,但是生命周期延长到程序级别。
静态变量只能初始化一次,并且在整个程序运行期间,其值一直保存。
如果局部变量和全局变量重名,那么使用::可以引用全局变量。
函数的声明、定义
函数定义方式:[存储类型] 返回数据类型 函数名(形参列表){函数体}
函数声明方式:返回数据类型 函数名 (形参列表)。声明可以扩大函数的作用域,令前面的函数调用后面的函数
函数存储类型有extern,static。默认为extern,作用域为程序级别,可以被其他文件调用,不过需要在其他文件中进行extern说明。如果限定为static,则只能被本文件调用,哪怕进行了extern说明也不行。
三.符号常量
宏定义、const,枚举
宏定义:#define PI 3.14 定义在函数外,在预编译的时候进行宏展开
内连函数:inline 返回数据类型 函数名(参数列表)也是在预编译的时候进行展开,其中不能含相关流程控制语句。
const : const int max=300;
定义在函数内部或者外部,在编译的时候进行赋值
枚举:enum 枚举标识符 {枚举元素表}
四、位运算
位运算的运算对象只能为int或者char
位运算包括~,&,|,^,>>,<<这个和×2或者除以2有很大关系
五、输入输出
cin>>变量名 如果多个输入数据,之间通过空格,回车或者制表符分开,通过回车键结束。
cin.getline(word,SIZE,'\n')最多提取SIZE-1个字符(可包含空格),遇到回车就结束
cin.read(word,SIZE)可以提取多行字符串(包含空格和回车符)最多提取SIZE-1个,遇到ctrl+z就提前结束
cin.get()提取键盘输入的单个字符
cout为输出,可以利用setw(),setfill()来控制输出格式
六、指针和引用
变量、地址和指针
任何变量都具有两个性质:地址和内容。
地址为变量存储的开始位置,是unsigned int的值。
指针变量又叫指针,其值为地址,可知其本身都是unsigned int类型,但是其运算和所指向的对象类型密切相关。指针本身也有自己的地址。
变量的访问具有两种方法:一种是通过变量名进行访问(称为直接访问),通过指针访问称为简介访问。这里特殊的是对于数组,结构体等,其变量名本身就代表变量首地址,可以看作指针。
取地址运算符为&;
取值运算符为*或者[]
可以认为*,[]和&是你运算的
相关符号的优先级为:()优先于[],.,->优先于*&
行指针和普通指针:
行指针:[存储类型] 数组类型 (*指针)[n]
指针数组:[存储类型] 数组类型 *指针 [n]
利用这种方法来理解二维变量int a[2][3];a可以看作是一个行指针,其+1以为着移动3×4
a[0]就相当于普通的指针了,其+1以为这移动4
(*pp)[3]=a定义一个行指针,+1移动的是整个行,要想取出二维数组中某个元素的值应当使用 *(*(pp+1)+1)得到a[1][1]
*p[4]={a[0],a[1]}就相当于定义了一个指针数组。
指针函数和函数指针:
函数也是一个指针常量,代表函数在内存中的入口地址。
函数指针:[存储类型] 数据类型 (*函数指针)(形参表)。通过函数指针,C++可以将函数作为一个形式参数进行传递,这在java中是不被允许的。
指针函数:(指的是返回值为指针类型的函数): [存储类型] 数据类型 * 函数名(形参表){return 指针;}
引用:
这里的引用和java中的引用是一个概念,而且java取消了指针机制。
函数传递时,通过指针或者变量传值本质上都是复制传值,而引用本质上是一种别名,始终和某个变量捆绑在一起,因而比指针安全。
利用指针进行动态存储空间分配:
不仅仅是C++中类似于java中数组,对象等这样的引用类型才可以进行动态空间分配,基本类型也可以的。
(1) 分配单个变量 int *p; p=new int(初值)
释放单个变量 delete p
(2) 分配一维数组 int *p ; p=new int[10];
释放数组空间: delete []p;
C++语法一二的更多相关文章
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- Oracle存储过程基本语法介绍
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
- Oracle存储过程基本语法 存储过程
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
- Adblock Plus完美过滤视频网站广告、无黑屏!及屏蔽非本站脚本的Adblock Plus过滤器语法之探讨
测试用浏览器:Firefox 24.订阅的Adblock Plus过滤规则有默认的 ChinaList + EasyList,和国内视频广告规则[Yge.me],其网址:http://i.yge.me ...
- 《Java编程思想》第一二章
前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...
- CSS 常用语法与盒模型分析
CSS基础知识 CSS规则由两个主要的部分构成:选择器,以及一条或者多条声明 selector { property: value; property: value; ... property: va ...
- 自己写个 Drools 文件语法检查工具——栈的应用之编译器检测语法错误
一.背景 当前自己开发的 Android 项目是一个智能推荐系统,用到 drools 规则引擎,于我来说是一个新知识点,以前都没听说过的东东,不过用起来也不算太难,经过一段时间学习,基本掌握.关于 d ...
- PHP 数组遍历 foreach 语法结构
foreach 语法结构用于遍历数组. foreach() PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未 ...
- (转)Oracle存储过程基本语法
本文转载自:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 存储过程 1 CREATE OR R ...
随机推荐
- OSPF与ACL 综合应用
1.企业内网运行OSPF路由协议,区域规划如图所示:2.财务和研发所在的区域不受其他区域链路不稳定性影响:3.R1.R2.R3只允许被IT登录管理:4.YF和CW之间不能互通,但都可以与IT互通:5. ...
- MySql-Mysql技术内幕~SQL编程学习笔记(1)
1.MySQL的历史,一些相关概念. 2.MySQL数据类型 *通常一个页内可以存放尽可能多的行,那么数据库的性能就越好,选择一个正确的数据类型至关重要. 1>UNSIGNED类型: 将数字类型 ...
- 2019上海网络赛B题(差分 + 离散化 or 差分 + 思维)
这题.....队里都没怎么训练差分,导致败北...写了一堆线段树嘤嘤嘤,到最后也是超时,比赛结束后看到了差分的思想于是就去学了一手. 其实了解差分思想的一眼就能看出来是差分了.但是如果对n差分的话很明 ...
- Comet OJ C1076 [Contest #4]求和
题目 首先我们可以通过经典容斥转化为计算\([1,x]\)的答案. 现在我们考虑一个数的个位对答案的贡献. 每做一次操作都会让个位加上十位然后取模,直到只有个位为止. 我们发现这个过程中,个位数前的系 ...
- 图——图的Kruskal法最小生成树实现
1,最小生成树的特征: 1,选取的边是图中权值较小的边: 2,所有边连接后不构成回路: 2,prim 算法是以顶点为核心的,最下生成树最大的特征是边,但 prim 算法非要以顶点为核心来进行,有些复杂 ...
- kmeans 聚类 k 值优化
kmeans 中k值一直是个令人头疼的问题,这里提出几种优化策略. 手肘法 核心思想 1. 肉眼评价聚类好坏是看每类样本是否紧凑,称之为聚合程度: 2. 类别数越大,样本划分越精细,聚合程度越高,当类 ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- 如何使用js在移动端和PC端居中
在手机移动端和PC端控制居中是一个很蛋痛的问题,因为屏幕宽度在变化,所以就不要写死样式,那么我想用JS来控制,灵活的控制宽度,需要注意这三个时候: (1)首先需要在页面刚加载的时候就调用此函数, (2 ...
- fpga新建nios
[FPGA]基于Qsys的第一个Nios II系统设计 (2013-12-12 21:50:08) 转载▼ 标签: fpga niosii qsys helloword quartusii 分类: 嵌 ...
- 初学Git——命令总结
首先,感谢廖雪峰老师制作的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0 ...