1,linux系统上如何跑c++程序
1,vim一个hello.cpp,内容如下:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return ;
}
2,g++编译刚刚的程序:g++ 源文件名 -o 可执行的脚本名,比如我执行的就是:g++ hello.cpp -o hello
3,在当前文件夹执行: ./hello ps:并不需要向python一样指定编译器,大约是因为比较底层吧
2,linux系统上自带GUN的c++编译器,可以通过g++ -v检查是否安装了gcc,windows系统上推荐使用visual studio,方便调试,安装教程
3,基本语法
#include <iostream> //头文件,头文件中包含了程序中必须的或者有用的信息
using namespace std; //使用命名空间 // main() 是程序开始执行的地方 int main()
{
cout << "Hello World"; // 输出 Hello World
return ; //终止main函数,并且向调用进程返回0
}
//c++用分号表示一行程序的结束,用大括号表示一个语句块,区分大小写,变量名用英文或者下划线加上数字表示,注释可用://或者:/*我是多行注释*/
三字符组:三字符组是啥?就是用??=表示#,用??/表示\,用??(表示[,
内置数据类型:
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 |
wchar_t |
数据类型的修饰:
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 to 18,446,744,073,709,551,615 |
float | 4 个字节 | +/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | +/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | +/- 1.7e +/- 308 (~15 个数字) |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
在这里主要说一下修饰符:
1,signed和unsigned主要区别是,signed是支持正负的,就拿int来说,默认一个int是4个字节,用4*8=32位来表示数据,其中第一位是表示正负号的,所以这个int的大小是正负2××31(正数需要减一),而unsigned int只表示正整数,所以第一位不再表示符合,所以取值范围是0-2××32,对于char类型,同理,但是稍有不同,目前不能理解。
2,long和short,默认的int用4字节表示,short int用两字节表示,所以是2×8=16位,大小是正负2××16(正整数需要减一),signed和unsigned同理。而long int用8个字节表示,需要8×8=16位,大小是正负2××64,天啦撸,计算机的计算能力真不是盖得。
跑一下自己电脑里的数据类型:sizeof()返回各种数据类型的大小,单位是字节;endl将会在行后插入换行符;<<用于向屏幕传递多个值(实践证明,就算是传递一个值也需要这个,,,)
typedef没明白是啥意思,估计就是给原有的数据类型换个名字,内容一点也没有换。
枚举类型的意思就是,定义某个变量只能是某几个值中的一个,例如
enum color { red, green, blue } c;
c = blue;
//定义一个枚举名为color,c的类型就是color,也就是说c只能是red,green和blue中的一个,,然后c=赋值为bule。用下标也行,没有特殊标识就是0,1,2
看我的实例:
#include <iostream>
using namespace std;
int main()
{
enum color { red, green, blue } c; //定义枚举
c = red;
cout << "i am c"<< c <<endl; //打出来瞅瞅
return ;
} //结果返回的竟然是'i am c0',好惊讶,如果c=blue,那就返回‘i am c2’,感觉莫名其妙
4,变量类型
1,bool型:储存true或者false
2,char:1个字节(B)
3,int整数
4,float:4B,32位(从31到0,反序),31是符号,往前是8位指数和23位小数
5,double,双精度浮点值:8B,(63到0反序),63位是符号,11位是指数,52位是小数
6,void表示类型缺失
7,wchar_t宽字符类型,大约是汉字等编码过的字符
声明变量:
int i, j, k;
char c, ch;
float f, salary;
double d; extern int d = , f = ; //d 和 f 的声明
int d = , f = ; // 定义并初始化 d 和 f
byte z = ; // 定义并初始化 z
char x = 'x'; // 变量 x 的值为 'x'
//注意extern:它是声明而不是定义。一个 c++ 程序可以包含多个文件,在一个文件中已定义的变量,如果要在另一个文件中调用,就要先声明一下变量,此时用 extern 这个关键字来声明。(注意:在一个程序中,变量只能被定义一次,但可以多次声明)
变量声明,定义和初始化:
#include <iostream>
using namespace std; // 变量声明
extern int a, b;
extern int c;
extern float f; int main ()
{
// 变量定义,类似于js,可以先声明后初始化
int a, b;
int c;
float f; // 实际初始化
a = ;
b = ;
c = a + b; cout << c << endl ; // f = 70.0/3.0;
cout << f << endl ; //23.3333 return ;
}
声明不止针对变量,对待函数同样有效:
// 函数声明
int func(); int main()
{
// 函数调用
int i = func();
} // 函数定义
int func()
{
return ;
}
5,变量作用域:
全局和局部变量:总体和别的编程语言一样。注意有个不同点。
#include <iostream>
using namespace std; // 全局变量声明,打印出来将会是0
int g;
int main ()
{
// 局部变量声明
int a, b; // 实际初始化
a = ;
b = ;
g = a + b;
cout << g;
return ;
}
定义全局变量时候,系统会为下面的数据类型设置默认值:
int:0
char:‘\0’
float:0
double:0
pointer:NULL
6,常量:
又叫字面量,常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
整数常量:整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量后面可以带指示符号,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
实例:
// 十进制
// 八进制
0x4b // 十六进制
// 整数
30u // 无符号整数
30l // 长整数
30ul // 无符号长整数
浮点常量:浮点常量由整数部分、小数点、小数部分和指数部分组成。带符号的指数是用 e 或 E 引入的。
实例:
3.14159 // 合法的
314159E-5L // 合法的
510E // 非法的:不完整的指数
210f // 非法的:没有小数或指数
.e55 // 非法的:缺少整数或分数
布尔常量:true或者false
字符常量(就一个):字符常量是括在单(单引号哦)引号中。如果常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L'x'),此时它必须存储在 wchar_t类型的变量中。否则,它就是一个窄字符常量(例如 'x'),此时它可以存储在 char 类型的简单变量中。
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。
在 C++ 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:
\\ | \ 字符 |
\' | ' 字符 |
\" | " 字符 |
\? | ? 字符 |
\a | 警报铃声 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ooo | 一到三位的八进制数 |
\xhh . . . | 一个或多个数字的十六进制数 |
字符串常量(可以是好多个):字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
如何定义常量:
#include <iostream>
using namespace std; #define LENGTH 10 //定义常量LENGTH 为10,据说是宏定义,只要编译器碰到LENGTH,那就自动替换为10用,
#define WIDTH 5
#define NEWLINE '\n' int main()
{ int area; area = LENGTH * WIDTH; //10*5=50
cout << area; //按理说应该输出为50
cout << NEWLINE; //换行符,输出了也看不出来
return ;
}
const用来声明指定类型的常量:言外之意就是define没有指定类型。
#include <iostream>
using namespace std; int main()
{
const int LENGTH = ;
const int WIDTH = ;
const char NEWLINE = '\n';
int area; area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return ;
}
注意,常量一般都用大写字母来写。
7,修饰符类型(前面学过了,再巩固一下吧)
1,数据类型修饰符:
signed int:有符号整数型,也就是说第一位表示正负符号。unsigned int:无符号整数,没有符号,所以可以表示的正数范围比较大
比如:
#include <iostream>
using namespace std; int main()
{
short int i; // 有符号短整数
short unsigned int j; // 无符号短整数 j = ; i = j;
cout << i << " " << j; return ;
}
/*无符号短整数 50,000 的位模式被解释为有符号短整数 -15,536。*/
其他限定符:
const:对象再程序执行期间不能被修改改变。
volatile:告诉程序不优化变量
restrict:由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。