学习笔记

C/C++

指针

数组指针 和 普通的类型指针的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

int arr[3][3] = { { 1,2,3 },{4,5,6},{7,8,9} };

//从汇编代码的角度看数组指针的执行和普通指针无异
//但声明方式必须按照C的语法
int* arrpoint = arr[0];
int(*ap1)[3][3] = &arr;

//打印输出的值均为 5
printf("%d %d", *(ap + 3*1 +1), ((*ap1)+1)[0][1]);

//函数指针
int _cdecl Plus(int a,int b)
{
return a+b;
}
//声明一个函数指针指向上面的函数PLus
int (_cdecl *FunctionPointer)(int,int) = Plus;
//指针函数被调用时按照调用约定来进行参数压栈和平衡堆栈
//函数指针无法进行加减等操作


调用约定

参数传递顺序
1.从右到左依次入栈:stdcall,cdecl,thiscall,fastcall
2.从左到右依次入栈:__pascal

函数内平衡堆栈(自己平衡): __stdcall, __fastcall, __thiscall
函数外平衡堆栈(返回后平衡): __cdecl