函数参数入栈

上一篇中我们知道三种函数规范

#include <stdio.h>
#include <stdlib.h>
void HP(int a,int b,int c,int d)
{
    int f=5;
    int g=7;
    printf("%p/n%p/n%p/n%p/n%p/n%p/n",&a,&b,&c,&d,&f,&g);
}

int main(int argc, char *argv[])
{
  HP(2,3,4,5);
  system("PAUSE");   
  return 0;
}

输出:

0055FF50

0055FF54

0055FF58

0055FF5C

0055FF44

0055FF40

参数入栈

一,入栈顺序右----》左

二,地址偏移高----》低

局部变量入栈

先声明的先入栈

 

C语言中的可变参数处理

 

void arg_cn(char *fmt,...)
{
    printf("%p/t%s/n",fmt,fmt);
    va_list v_l;
    va_start(v_l,fmt);
    while(*v_l)
    {
        char *str=va_arg(v_l,char *);
        printf("%p/t%s/n",v_l,str);
    }
    va_end(v_l);
}
int main(int argc, char *argv[])
{
  arg_cn("hehe","12","34","56","78");
  system("PAUSE");   
  return 0;
}

输出:

00403026   hehe

0022FF58    12

0022FF5C    34

0022FF60    56

0022FF64    78

 

呵呵是不是可变参数的处理就是利用参数入栈的规则进行处理的啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值