Open dululu opened 5 months ago
视频:ysq 文档: github
只是差缺补漏,快速过一遍💨💨💨 基础知识:以点带面 本课重点: 指针和内存管理 程序效率提升; 介绍OpenCV采用c++特性设计cv::Mat类 介绍ARM开发:ARM开发与Intel的x86开发没有区别。嵌入式ARM,智能设备/ARM服务器。 基础知识 P1:编译 Compile 编译C++代码:g++编译器 g++ hello.cpp g++ hello.cpp --std=c++11 //告诉编译器采用哪一个标准 //执行成功,生成可执行文件a.out g++ hello.cpp --std=c++11 -o hello //更改执行文件名 ./hello //执行 计算机编程语言发展历史 二进制指令(Binary instructions for CPU): 纸带打孔表示0和1
只是差缺补漏,快速过一遍💨💨💨
g++ hello.cpp g++ hello.cpp --std=c++11 //告诉编译器采用哪一个标准 //执行成功,生成可执行文件a.out g++ hello.cpp --std=c++11 -o hello //更改执行文件名 ./hello //执行
- 汇编语言(assembly language) - 高级编程语言(high level language): - C:1973 - C++:1979,c with class - Java:1995 生成字节码class文件 - Python:1990 脚本语言
编译和链接
函数的声明和定义(实现)
int mul(int a, int b); //*.h
int mul(int a, int b) // .c,.cpp { return a * b; }
- **debug** - 编译错误:语法错误,如漏了分号 - 链接错误:Mul.o 与 mul.o - 运行时错误:如除数为0,2/0 ### P2 预处理和宏 Preprocessor and Macros *在编译之前的步骤* - 定义规则 - 以`#`开头 - 每个预处理指令只能占一行 - 宏定义 ```cpp #define PI 3.14 // PI 不是变量,因为不可改变,理解为文字替换
为了避免同一个头文件被包含(include)多次,C/C++ 中有两种宏实现方式:
#pragma once
方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif
方式二:
... ... // 一些声明语句,好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题
- ` #ifndef / #define` ```cpp #ifndef __XXX_H__ #define __XXX_H__ int a=1; #endif // 如果没有定义宏__XXX_H_,执行;如果已经定义了,直接结束。变量 a 只被定义一次 //通过宏定义解决头文件重复包含。
std::ostream cout
int
bool
cout is an object of data type ostream in namespace std. cout是命名空间std中数据类型为ostream的对象。 cin 是 istream
<<
cin >> a; //从标准输入读数据转成整数类型,存到a里面去。 cout << "打印";
data1 + data2; operator+(data1,data2);//等价的函数调用
c语言风格输出,printf
printf
int printf(const char *format,....)
int v = 100; printf("Hello,value = %d\n", v);
输入:scanf
scanf
int v; int ret = scanf("%d",&v);
short int
int 一般都是32位,
有符号整数int max:0111 1111 1111 1111 1111 1111 1111 1111 =2^31^-1 min: 1111 1111 1111 1111 1111 1111 1111 1111 = -2^31^ (多一个负数的最大值) 低31位存数值,最高位存符号 无符号整数 unsigned int max:1111 1111 1111 1111 1111 1111 1111 1111 =2^32^-1 min:0 32位都用来存数值,所以可以存放16位数乘以16位数的数
有符号整数int
无符号整数 unsigned int
unsigned int
sizeof()
int i = 0; cout<<"sizeof(int)=" sizeof(i) <<endl; //i 不是变量,是一个常量。
char
singned char
unsigned char
ASCII
中文表示 char16_t,char32_t bool 字节是最小的存储单元,bool占一个字节,8位 bool d = -21; 只要不是0,那么赋值就是1 size_t 无符号整数类型,一般表达内存大小,元素的个数。
char16_t
char32_t
字节是最小的存储单元,bool占一个字节,8位 bool d = -21; 只要不是0,那么赋值就是1
bool d = -21
0
1
size_t
无符号整数类型,一般表达内存大小,元素的个数。
2.34E+10f : 可以表示为 23400000000,即 234 亿。其中,E 表示 10 的指数,+10 表示 10 的 10 次方,f 表示浮点数。 32位单精度浮点数 符号位 系数 精度 double,64位 long double 数组 array[] 连续的内存,在Java中是一个对象。 可以是存储任何数据类型
2.34E+10f : 可以表示为 23400000000,即 234 亿。其中,E 表示 10 的指数,+10 表示 10 的 10 次方,f 表示浮点数。
未知长度的数组,长度由初始化决定。
int num_array[] = {1,3,4,6};// 4 int
把数组传递给函数内部。
values[]是一个指针,代表数组的首地址,size_t数组>的长度。 //float类型的指针 float array_sum(values[], size_t length); float array_sum(*values, size_t length);
values[]是一个指针,代表数组的首地址,size_t数组>的长度。
//float类型的指针 float array_sum(values[], size_t length); float array_sum(*values, size_t length);
数组元素的读写 array1,array2是数组的首地址
array1
array2
越界
没有边界检查,在c++中。如果发生越界,按照地址的逻辑直接去进行读和写。 在c++中,数组不是一个对象;数组是一块连续的内存,数组名指向首地址 ,大小不知道。 缺点:易出错 优点:没有边界检查,效率高
没有边界检查,在c++中。如果发生越界,按照地址的逻辑直接去进行读和写。
多维数组 当使用数组名作为首地址的时候,必须指定列数,不然找不到下一行。 确定偏移的位置。
Array-style Strings 数组类型字符串 最后一定要加一个0,来结束字符串。'\0' 整数值为0,字符到此为止。否则就会发生越界。
strlen()返回字符的数量,遇到‘\0’就会终止。
size_t strlen(const char *str);
常见的字符串
数组长度为5,字符串长度为4
视频:ysq
文档: github
编译和链接
函数的声明和定义(实现)
int mul(int a, int b); //*.h
int mul(int a, int b) // .c,.cpp { return a * b; }
为了避免同一个头文件被包含(include)多次,C/C++ 中有两种宏实现方式:
#pragma once
方式二:
pragma once
... ... // 一些声明语句,好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题
P3 简单输入和输出
cpp
std::ostream cout
c++并未定义任何输入输出语句,取而代之,包含了一个全面的标准库(std)来提供IO机制。许多例子都是使用iostream,来表示输入输出流。int
,bool
类似<<
是一个operator运算符c
c语言风格输出,
printf
int printf(const char *format,....)
输入:
scanf
P4 常见数据类型
int
short int
2个字节16位int
一般都是32位,sizeof()
返回当前数值占多少个字节char
char
: 8-bit integer indeed!singned char
:-128——127unsigned char
:0——255ASCII
码定义一些符号和宏的使用。
浮点数float
未知长度的数组,长度由初始化决定。
把数组传递给函数内部。
数组元素的读写
array1
,array2
是数组的首地址越界
多维数组 当使用数组名作为首地址的时候,必须指定列数,不然找不到下一行。 确定偏移的位置。
字符串 String
Array-style Strings 数组类型字符串 最后一定要加一个0,来结束字符串。'\0' 整数值为0,字符到此为止。否则就会发生越界。
strlen()返回字符的数量,遇到‘\0’就会终止。
常见的字符串
数组长度为5,字符串长度为4