_cdecl(c标准调用约定)
调用方开辟形参,调用方进行清理
_stdcall(Windows的标准调用约定)
调用方开辟形参内存,被调用方清理
_fastcall(快速调用约定)
两种情况:1.形参字节小于等于四
前两个形参值不开辟内存,寄存器带入被调用方
第三个形参开始和_stdcall调用约定相同
2.形参字节大于四
调用方开辟内存,被调用方清理内存
_thiscall(c++调用约定)(普通成员方法)
调用约定:规定符号的生成规则
形参的入栈顺序
形参的开辟和清理方式
类和对象:
函数的默认值:
压栈:是从右向左的,匹配:是从左向右的
如果实参存在,用实参,如果实参不存在,用默认值
函数的默认值:自右向左,依次设计(不能重复赋值)
const:
const 修饰的变量叫常量
编译期间将用到常量的地方替换成常量初始化的值
编译期间将用到常量的地方替换成常量初始化的值
定义常量时一定要初始化
const修饰的全局变量是一个local的符号
![调用约定与类与对象初 调用约定与类与对象初](https://i-blog.csdnimg.cn/blog_migrate/997fc60904a8376178e609be7f7f6bb8.jpeg)
零初始化:double(); int(); char c=char();
extern"c"(以c的规则生成)
{
extern int Sum(int a,int b);
}
c++语法:把括号中的代码以c的方式处理
c++调用c:
extern"C"
{
void test()
{
};
}
c调用c++:1.修改c++源文件中的代码
2.不能修改中间层
而且所有的c++编译器都有宏:cplusplus
int *p=&a;//指针
int &b=a;//引用(底层实现是用指针来实现)
(1)一定要初始化
(2)不能引用不能取地址的数据
(3)引用不能再引用
(4)引用使用的是引用的内存块
const int &c=10;//引用临时量的内存块
cout<< b <<endl;//cout<< &b<<endl;//&(*b)
int &b=a;
b=c;
&b=c;//一旦引用后无法改变的值
不能返回局部变量的指针或者引用
new与delete:
int *cpp=new int();//加括号可以进行初始化
delete cpp;
new:1.开辟数组2.初始化
delete:1.销毁资源2.释放空间
int *parr=new int [10] ();//10表示数组个数
delete[] parr;//为什么不允许初始化?
答:不知道开辟空间的大小,不知道这个值返回给哪个
1.new/malloc
1.new 关键字,malloc 函数
2.new 开辟空间 + 初始化 malloc 开辟空间
3.new 自由存储区域 malloc 堆上
4.new 抛出异常 malloc 内存不足 返回NULL
1.new 关键字,malloc 函数
2.new 开辟空间 + 初始化 malloc 开辟空间
3.new 自由存储区域 malloc 堆上
4.new 抛出异常 malloc 内存不足 返回NULL
![调用约定与类与对象初 调用约定与类与对象初](https://i-blog.csdnimg.cn/blog_migrate/f82a77cb08cc1d6dda044f0e8cfe4751.jpeg)
![调用约定与类与对象初 调用约定与类与对象初](https://i-blog.csdnimg.cn/blog_migrate/5be88fc7631cd87b5a6eb538d7f991de.jpeg)