C语言函数参数压栈的顺序是?

今天分享关于C语言函数参数压栈顺序的问题。按照日常习惯,C语言的函数参数压栈顺序是从左到右吧?但是事实却是相反的,C语言函数参数压栈顺序是从右到左的。下面看一个程序:

#include <stdio.h>

void stack_test1(int a, int b, int c);

int main(void)
{
 int a = 1, b = 2, c = 3;
 
 stack_test1(a, b, c);
 
 return 0;
}

void stack_test1(int a, int b, int c)
{
 printf("a = %d, &a = %#x \n", a, (unsigned int)&a);
 printf("b = %d, &b = %#x \n", b, (unsigned int)&b);
 printf("c = %d, &c = %#x \n", c, (unsigned int)&c);
}

该程序输出结果为:

a = 1, &a = 0x61fef0

b = 2, &b = 0x61fef4

c = 3, &c = 0x61fef8

我们知道,栈是向下生长的,即从高地址向低地址的方向分配内存。由程序输出结果可知,变量c的值首先存储在高地址,其次是b,最后低地址保存a。即函数的参数压栈的顺序是从右到左。

为什么是从右到左呢?下面使用printf函数来分析:

printf函数的原型是:int printf(const char *format,...);

我们都知道,printf是个变参函数。那么,其参数的个数是如何确定的呢,靠的就是format,如果format首先被压入栈中,就无法知道还有多少个参数还没入栈了;所以,format应该最后入栈,才能确定参数的个数,也即符合参数入栈顺序为“从右到左”的规则。

以上就是关于函数参数压栈顺序的总结,希望能对大家有帮助。

感谢您的阅读,欢迎持续关注!

每日一句

你所做的一切努力并不会立即给你想要的一切,但可以让你逐渐成为你想成为的那一种人。

(0)

相关推荐

  • 【转】可变参数函数

    c/c++支持可变参数的函数,即函数的参数是不确定的. 一.为什么要使用可变参数的函数? 一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数.但在某些 ...

  • C语言函数参数是如何传递的?

    C语言函数参数是如何传递的? 原创守望的编程珠玑2019-06-22 08:21:22 前言 我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准 ...

  • R语言中创建函数参数的问题

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. Sys.setlocale('LC_ALL','C') ## [1] &q ...

  • C语言二维数组作为函数参数?(陷阱)

    大家有构建过二维数组作为函数的参数吗?有没有遇到什么问题呢?现在,我们先来看一个函数: void func1(int **array, int m, int n) {  int i = 0, j = ...

  • 【易错】C语言二维数组作为函数参数?

    大家有构建过二维数组作为函数的参数吗?有没有遇到什么问题呢?现在,我们先来看一个函数: void func1(int **array, int m, int n) {  int i = 0, j = ...

  • C语言 const 修饰函数参数 - C语言零基础入门教程

    目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数名后面 二.const 修饰函数参数 1.值传递 2.址传递 ...

  • 2.2 if函数参数省略的用法

    2.2 if函数参数省略的用法

  • 农村盖房压栈

    〓 第 1543 期  〓 作者|王万荣  编辑|王成海 上个世纪,村里的人们起房盖屋,每当到了垒好墙,封好山,上罢椽檩,就开始准备压栈了. 在上檩条之前,也就是上梁前,要在檩条上贴对联,贴斗方.对联 ...

  • C语言函数参数传递之值传递和地址传递

                              函数调用时需要注意函数参数传递是值传递(传值)还是地址传递(传地址). 传值:形参不影响实参的值 void swap(int m,int n){ i ...

  • (6条消息) OpenCV中的findContours函数参数详解

    OpenCV中的findContours函数参数详解 小白的进阶 2017-07-30 18:02:28 55008 收藏 303分类专栏:OpenCV 文章标签:opencvOpenCV中通过使用f ...