可变参数的理解
Posted taek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可变参数的理解相关的知识,希望对你有一定的参考价值。
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\\n", &a); printf("b address is %x\\n", &b); char* addr = (char*)&b ; printf("b values is %d\\n", *(int*)addr); addr = addr + sizeof(int); //这里如果是long, 那么a的值是0,但没报错 printf("a values is %d\\n", *(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))
参考这里
以上是关于可变参数的理解的主要内容,如果未能解决你的问题,请参考以下文章