-3

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

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

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
}

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

4

2 回答 2

3

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

我们不需要;C语言标准保证顺序:

[C99 §6.7.2.1]在结构对象中,非位域成员和位域所在的单元的地址按声明顺序递增。

于 2013-10-04T12:03:47.800 回答
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));
}

或者您可以使用一种方法来评估结构的地址

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

于 2013-10-04T12:40:21.230 回答