zoukankan      html  css  js  c++  java
  • 可变参数的理解

    c中的printf中的参数就是典型的可变参数,参数不固定,那怎么获取呢

    正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈

    #include <stdio.h>
    #include <stdlib.h>
    
    #define __va_rounded_size(TYPE)  
      (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
    
    void test(int a, int b){
            printf("a address is %x
    ", &a);
            printf("b address is %x
    ", &b);
    
            char* addr = (char*)&b ;
            printf("b values is %d
    ", *(int*)addr);
    
            addr = addr + sizeof(int);  //这里如果是long, 那么a的值是0,但没报错
            printf("a values is %d
    ", *(int*)addr);
    }
    
    int main(){
            test(1,2);
            return 0;
    }

    结果为

    a address is 3e20571c
    b address is 3e205718
    b values is 2
    a values is 1

    明显b的地址要高于a, b先于a入栈

    肯定知道b的地址,那么a的值 就是 *(int) (&b+sizeof(int)) 

     参考这里

  • 相关阅读:
    页面的加载过程
    free 命令
    linux chmod命令(转)
    less 命令(转)
    cat 命令(转)
    cp 命令(转)
    mv命令(转)
    rm 命令(转)
    mkdir命令
    Docker网络基础
  • 原文地址:https://www.cnblogs.com/taek/p/7492649.html
Copyright © 2011-2022 走看看