Hello World程序的组成部分
可以分为两部分:
(1)以#开头的是预处理器编译指令
(2)int main() 开头的是程序的主体
预处理编译指令#include
定义:预处理器是一个在编译前运行的工具
#include 是让预处理器获取指定文件(这里指iostream)的内容,并将他们放在比编译指令所处的位置。使用<> 通常用于包含标准头文件,如果是自己创建的头文件,则需要使用" "
名称空间的概念
使用的是std::cout 而不是cout 原因在于cout位于标准std名称空间中。
什么是名称空间?
假设调用cout时没有使用名称空间限定符,且编译器知道cout存在于两个地方,编译器应该调用哪个?所以这会导致冲突的,导致无法编译通过。名称空间是给代码指定的名称,有助于降低命名冲突的风险。
使用cout 和std名称空间中的其他功能时,在代码中添加std限定符很繁琐,为了避免添加该限定符,可使用using namespace xx;
#include<iostream>
int main(){
//using namespace std;
/*
*下面的是更加严谨的写法,直接指定使用哪个命名空间的什么方法
*/
using std::endl;
using std::cout;
cout << "Hello Jeck" << endl;
return 0;
}
C++代码中的注释
// 指出从这里开始到行尾都为注释
/* 和 */ 表示他们之间的文本为注释
C++函数
函数能够将程序划分成多个功能单元,并按照您选择的顺序调用,函数被调用时,通常将一个值返回给调用它的函数。
#include<iostream>
int haha();//函数的声明
int main(){
//using namespace std;
/*
*下面的是更加严谨的写法,直接指定使用哪个命名空间的什么方法
*/
using std::endl;
using std::cout;
cout << "Hello Jeck" << endl;
haha();
return 0;
}
int haha(){
std::cout << "你好,哈哈" << std::endl;
return 1;
}
这里注意的是需要有函数的声明,它告诉编译器您要创建一个函数,该函数名为haha(),返回类型为int。正是因为该声明,编译器才会编译int main中的haha()
使用变量和常量
变量是让程序员能够将数据存储一段时间,而常量让程序员定义不允许修改的东西。
1>内存和寻址概述
所有计算机、智能手机以及其他可编程设备都包含微处理器和一定数量的临时存储空间。
这种临时存储器被称为随机存取存储器(RAM)。
可以将RAM当做宿舍里成排 存物柜,每个存物柜都有编号,即地址,要访问特定的内存单元,如内存单元578,需要使用指令要求处理器从这里获取值或将值写入到这里。
2>声明变量以访问和使用内存
变量类型向编译器指出了变量可存储的数据的性质,编译器将为变量预留必要的空间,变量名由程序员选择,它替代了变量值在内存中的存储地址。
3>声明并初始化多个类型相同的变量
int a = 0,b = 0,c = 0;
注意:需要时再声明变量通常是更好的选择,因为这让代码更容易理解,存储在变量中的饿数据被存储在内存中,应用程序终止时,这样的数据将丢失。
4>全局变量
在函数外部而不是内部声明的,则函数main 和 函数都可以使用他们。他们是程序中作用域最大的变量,
5>命名约定
变量名,采用骆驼拼写法 firstNumber
函数采用Pascal拼写法 MultiplyNumbers()
6>变量类型
bool 布尔值true/false
bool deleteFile = (haha == “yes”);
char 变量存储字符
char a = ‘Y’;
有符号整数和无符号整数的概念
符号表示正或负,在计算机中使用的所有数字都以位和字节的方式存储在内存中
1字节的内存单元包含8位,每位都要么为0,要么为1.
无符号整型变量不能包含符号信息,因此,他们的最大取值为相应有符号类型的两倍。
选择正确的数据类型以免发生溢出错误
如short ,int ,long,unsigned short ,unsigned int ,unsigned long等数据类型的容量有限,如果算术运算的结果超出了选定数据类型的上限,将导致溢出。
7>使用sizeof确定变量的长度
变量长度指的是程序声明变量时,编译器将预留多少内存,用于存储给该变量的数据。
要确定int变量的长度,可以调用sizeof并给它传递参数int
cout << "int size is :" << sizeof(int) << endl;
8>使用auto 自动推断类型
auto a = true;
9>使用typedef 替换变量类型
C++允许将变量类型替换为您认为方便的名称,为此可以使用typedef
typedef int HAHA;
HAHA number = 10;
std :: cout << "number :" << number << std::endl;
10>常量
子面常量
常量可以使用关键字,const 声明的常量
使用关键字constexpr 声明的常量表达式(C++新增)
使用关键字enum 声明的枚举常量
使用#define 定的常量(不推荐)
a:字面常量
std::cout << “Hello world”;
Hello world 就是一个字符串字面常量
b:使用const 将变量声明为常量
const int finalNumber = 15;
std::cout << "a :" << finalNumber << std::endl;
finalNumber = 11;//对常量进行修改
error: assignment of read-only variable ‘finalNumber’
c:使用enum枚举
//枚举
enum CardinalDirections
{
North = 25,
South,
East,
West
};
std::cout << "North :" << South << std::endl; //26
注意:编译器将枚举量转换成整数,每个枚举量都比之前的大1,如果没有指定起始值,那么认为从0开始
管理数组和字符串
1>什么是数组
数组是一系列元素
数组中所有元素的类型都相同
这组元素形成了一个完整的集合
2>声明和初始化静态数组
语法:
ElementType ArrayName [number] = {元素};
比如:int a[5] = {0,1,2,3,4};
int b[5] = {};//将所有元素都初始化为0
int c[5]= {1,2};//也可以初始化部分元素
int d[] = {1,2,5,6,7};//如果知道数组中每个元素得初始值,可不指定数组包含得元素数
3>数组中的数据是如何存储的
数组索引从0开始而不是1开始的
4>访问存储在数组中的数据
要访问数据中的元素,可使用从零开始的索引。访问数组时,如果超越其边界,结果将是无法预料的,在很多情况下,这将导致程序崩溃。
5>修改存储在数组中的数据
void array(){
int array[5] = {1,8,9,5,6};
//获取数组所占的内存: sizeof(array)
//获取数组中第一个元素所占的内存 : sizeof(array[0])
//获取数组的长度 : sizeof(array)/sizeof(array[0])
//查看数组中的数据
for(int i = 0;i< sizeof(array)/sizeof(array[0]);i++){
std::cout << "array[" << i << "] = " << array[i] << std::endl;
}
}
6>声明和初始化多维数组
要声明多维数组,可以指定每维包含的元素数
int a[2][3] = {{1,2,3},{7,8,9}};
虽然C++能够模拟多维数组,但存储数组的内存是一维的。如果你愿意也像下面那样初始化多维数组
int arrays[2][3] = {{1,2,3},{7,8,9}};
std::cout << "arrays[1][0] :" << arrays[1][0] << std::endl;
int as[2][3] = {1,2,3,7,8,9};
std::cout << "as[1][0] :" << as[1][0] << std::endl;
输出:
arrays[1][0] :7
as[1][0] :7
7>动态数组
C++提供了std::vector,这是一种方便而易于使用的动态数组
需要引用#include
8>C风格字符串
C风格字符串是一种特殊的字符数组
void sayHello(){
using namespace std;
cout << "Hello world" << endl;
char sayHello[] = {'H','e','l','l','o',' ','w','o','r','l','d','\0'};
cout << sayHello << endl;
}
使用表达式、语句和运算符
1>语句
在C++中,所有语句都以分号;结尾,分号界定了语句的边界。
2>复合语句(语句块)
可以使用花括{} 将多条语句组合在一起,以创建复合语句
{
int daysInYear = 364;
cout << “” << endl;
}
语句块通常将众多语句组合在一起,指出他们属于同一条语句,编写if语句或者循环时,语句块特别有用。
3>赋值运算符(=) int a = 12;
4>加法运算(+)、减法运算(-)、乘法运算(*)、除法运算(/)和求模运算符(%)
除法运算(/):返回两个数相除的结果
求模运算(%):返回除法运算的余数,也只能用于整数
int count(){
using namespace std;
int number1 = 12;
int number2 = 25;
cout << "两数之和 = " << number1 + number2 << endl;
cout << "两数之积 = " << number1 * number2 << endl;
cout << "两数之差 = " << number1 - number2 << endl;
cout << "两数之余 = " << number1 % number2 << endl;
cout << "两数相除 = " << number1 / number2 << endl;
}
结果:
两数之和 = 37
两数之积 = 300
两数之差 = -13
两数之余 = 12
两数相除 = 0