编程范式11 笔记

指针swap 汇编

void foo()
{
    int x;
    int y;
    x=11;
    y=17;
    swap(&x,&y);
}

按照指针传递话引用传递的汇编是一样的

SP=SP-8;
M[SP+4]=11;
M[SP]=17;
R1=SP;//&y
R2=SP+4;//&x
SP=SP-8;
M[SP]=R2;
M[SP+4]=R1;
CALL<swap>;
SP=SP+8;
SP=SP+8;
void swap(int* ap,int* bp)
{
    int tmp;
    tmp=*ap;
    *ap=*bp;
    *bp=tmp;
}

栈结构
bp
ap
saved pc
temp

<swap>:
SP=SP-4;//SP指向tmp
R1=M[SP+8];//读取int a的地址
R2=M[R1];//读取a的值
M[SP]=R2;//tmp=*ap

R1=M[SP+12];
R2=M[R1];//读取b的值
R3=M[SP+8];//读取a的值
R3=R2;//a=b

R1=M[SP];//读取tmp
R2=M[SP+12];//读取b的地址
M[R2]=R1;//b=a
SP=SP+4;
RET;//RET取出SP指向的值写入saved PC并让SP指向saved PC

引用 swap 汇编

void swap(int& a,int& b)
{
    int tmp;
    tmp=a;
    a=b;
    b=tmp;
}

函数栈
b
a
saved pc
tmp
引用:指针自动解引用

int x;
int y;
x=11;
y=17;
swap(x,y);//x,y必须为左值

this指针

某个类调用方法时会将this指针作为第0个参数传入

预处理器

定义全局变量

#define w 480
#define h 720
printf("widthis %d\n",w);
int area=w*h;

预处理器处理define和include
处理define用的哈希表,然后对代码里的w和h替换

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值