这是其中一次采访中提出的问题之一。我不知道发布与否的好处。但答案对我有帮助。
我们知道局部变量将存储在堆栈中,假设我们有类似的代码。
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
}
如何在函数中编写代码以显示结构字段在运行时堆栈中的存储顺序?
答案 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
的地址我能看到的唯一实用程序,如果你有一个联合,并且你想确定字节序(这可以适用于不同架构的微控制器)。