
C++编译工具:
Mac OS X 上的安装
如果您使用的是 Mac OS X,最快捷的获取 GCC 的方法是从苹果的网站上下载 Xcode 开发环境,并按照安装说明进行安装。一旦安装上 Xcode,您就能使用 GNU 编译器。
1.typedef 声明
您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef type newname;
例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:
typedef int feet;
现在,下面的声明是完全合法的,它创建了一个整型变量 distance:
feet distance;
1.extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 'extern' 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置
// 变量声明
extern int a, b
1. 变量从上往下进行查找,如果放在下面,编译不同过
可以在一个文件中引用另一个文件中定义的变量或者函
如果我不想改变num的声明的位置,但是想在main函数中直接使用num这个变量,怎么办呢?可以使用extern这个关键字。
2. 引用另一个文件中的变量
extern这个关键字的真正的作用是引用不在同一个文件中的变量或者函数。
总结:
extern 关键字实质上是声明,别的地方必须实现定义。
extern关键字只需要指明类型和变量名就行了,不能再重新赋值,初始化需要在声明处进行,像这种写法是不行的。
可以修饰变量,也可以修饰函数!
注:所有的包含C代码的方法都必须版含在extern "C"{}中
extern 和 static区别:
extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.
static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.
extern“C”作用:
extern "C"的目的就是主要实现C与C++的相互调用问题
https://www.cnblogs.com/markzhuqian/p/14461696.html
2.const关键字的作用
常量const==java中的final
在 C++ 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。
在c里面,指针不是常量,可以修改. 但是c++里面是常量
c++中不能通过地址修改值,但是c中是可以修改
用const定义的目标只能称为(只读)变量,所以不能说"const定义的常量"
存放在内存的哪个区域????
1). 变量中用const
2). 常用到const函数中将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,表明在该成员函数中不能对类的任何成员进行修改。
3).常量指针
常量指针.(常量指针和厂里之中的区别)
4).常量引用
5). 拷贝构造函数中用到const
jni常量指针和指针常量区别(const)
https://blog.csdn.net/qq_36132127/article/details/81940015
使用场景: 我传入一个指针, 但是我不想你把指针修改了,所以我就定义一个常量指针!
指针常量——指针类型的常量(int *const p, 哪个在前面)
本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。用法如下
int a = 10, b = 20;
int * const p = &a;
*p = 30; // p指向的地址是一定的,但其内容可以修改
常量指针——指向“常量”的指针(const int *p, int const *p)
常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。用法如下:
int a = 10, b = 20;
const int *p = &a;
p = &b; // 指针可以指向其他地址,但是内容不可以改变
总结: 看最后2个字,可以变的也是最后2个!
const 修饰函数
onst 在 () 之后主要用来限制 this 关键字,this 的值和地址都不能修改
// this = const Student* const this
// 第一个 const : 常量指针, 代表值不能修改
// 第二个 const : 指针常量,代表指针的地址不能修改
void change() const { // const 在 () 之后主要用来限制 this 关键字
// this->age + = 12;
// this = (Student)0x0012;
}
3. strcpy()方法的使用
如果右边的值,不能赋给左边, 那么可以通过这个拷贝的形式!
demo举例:
// char title[50] 类型,相当于java中的string
strcpy(book1.title,"book1标题");
strcpy(book1.autohor,"book1作者");
strcpy(book1.subject,"book1subject");
// 这个方法只用于字符串,不能用于int
// strcpy(book1.book_id,3);
book1.book_id=1;
4.在C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真。例如:
在 C++ 中使用 cout 输出 bool 变量的值时还是用数字 1 和 0 表示,而不是 true 或 false
java 这么是编译不过, 但是c++可以编译通过
private int start(){
return -1>0;
}
5.inline内联函数(耗时小的地方用)
执行<<<调用: 就用内联函数
当函数比较复杂时,函数调用的时空开销可以忽略,大部分的 CPU 时间都会花费在执行函数体代码上,所以我们一般是将非常短小的函数声明为内联函数
使用内联函数的缺点也是非常明显的,编译后的程序会存在多份相同的函数拷贝,如果被声明为内联函数的函数体非常大,那么编译后的程序体积也将会变得很大,所以再次强调,一般只将那些短小的、频繁调用的函数声明为内联函数。
在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符
2. 打印: 流插入运算符!
//从控制台获取用户输入
cin>>str>>age;
//将数据输出到控制台
cout<<str<<"已经成立"<<age<<"年了!"<<endl;
C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项。
流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。
命名空间: using namespace std;相当于java中的内部类
using namespace std;
cout << "Hello World"; // 输出 Hello World
https://blog.csdn.net/m0_62599305/article/details/122789156
6. 默认函数参数:
默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
7. 可变参数
java里面是...
java中:int ...
c++:...
h文件的方法决定c里面的调用方法
3.宏定义
7. 容器
容器分类 类名 概要
顺序容器 array 不支持动态扩容,采用数组的数据结构进行数据存储
顺序容器 vector 支持动态扩容,采用数组的数据结构进行数据存储
顺序容器 list 支持动态扩容,采用链表的数据结构进行数据存储
关联容器 set 默认按照value进行升序排序,值唯一。二叉树数据结构
关联容器 map 默认按照key进行升序排序,key唯一。二叉树数据结构
关联容器 multiset 默认按照value进行升序排序,值不唯一。二叉树数据结构
关联容器 multimap 默认按照key进行升序排序,key不唯一。二叉树数据结构
无序关联容器 unordered_set 对应容器的无序版本。哈希表数据结构
无序关联容器 unordered_map 对应容器的无序版本。哈希表数据结构
无序关联容器 unordered_multiset 对应容器的无序版本。哈希表数据结构
无序关联容器 unordered_multimap
网友评论