代码,用于显示结构字段在运行时堆栈中的存储顺序

时间:2013-10-04 11:52:47

标签: c stack structure

这是其中一次采访中提出的问题之一。我不知道发布与否的好处。但答案对我有帮助。

我们知道局部变量将存储在堆栈中,假设我们有类似的代码。

int main()
{
    struct ST1 {
        char ch1;
        short s;
        char ch2;
        long long ll;
        int i;
    }s1;
    function(s1);// pasing structure to function
// some code
}

function(struct ST1 s1) {
    // code to show the order in which the fields of the structure are stored on the run time stack
}

如何在函数中编写代码以显示结构字段在运行时堆栈中的存储顺序?

2 个答案:

答案 0 :(得分:3)

  

如何在函数中编写代码以显示结构字段的存储顺序?

我们不需要; C语言标准保证订单:

  

[C99§6.7.2.1] 在结构对象中,非位字段成员和位字所在的单位的地址会按声明的顺序增加

答案 1 :(得分:1)

我同意上述观点,关于做这种事情的必要性。

无论如何,如果你真的想做这样的事......

//changed to typedef, for convenience

typedef struct {
    char ch1;
    short s;
    char ch2;
    long long ll;
    int i;
}ST1;

void function(ST1 parameter);

//Function implementation:

void function(ST1 parameter)
{
    printf("\nch1 address: %ld", &(parameter.ch1));
    printf("\ns address: %ld", &(parameter.s));
    printf("\nch2 address: %ld", &(parameter.ch2));
    printf("\nll address: %ld", &(parameter.ll));
    printf("\ni address: %ld", &(parameter.i));
}

或者您可以使用一种方法来评估struct

的地址

我能看到的唯一实用程序,如果你有一个联合,并且你想确定字节序(这可以适用于不同架构的微控制器)。