参数在函数中的位置不同,取值是否不同?



除了函数的参数顺序不同,为什么相同的函数会有不同的结果?

例如:

我的代码

#include <stdio.h>
#define MAX_SIZE 100
void sum2(float *list, int n);
void sum3(int n, float *list);
float input[MAX_SIZE];
int main(void){
printf(" sum2(input, MAX_SIZE) n");
sum2(input, MAX_SIZE);
printf(" sum3(MAX_SIZE, input) n");
sum3(MAX_SIZE, input);
}
void sum2(float *list, int n)
{
printf("&list t= %pnn", &list);
}
void sum3(int n, float *list){
printf("&list t= %pnn", &list);
}

sum2(input, MAX_SIZE) 
&list   = 0x16fc5b268
sum3(MAX_SIZE, input) 
&list   = 0x16fc5b260

预期

sum2(input, MAX_SIZE) 
&list   = 0x16fc5b268
sum3(MAX_SIZE, input) 
&list   = 0x16fc5b268

与上面的代码一样,除了参数的顺序外,其他结果都是从同一个函数输出的。

我试着找一个类似的问题,但是我找不到。我认为如果它是一个具有相同值的函数,那么无论参数的顺序如何,输出的值都应该是相同的。我的意见有错吗?

为您的信息,我的编译器是苹果clang版本14.0.0 (clang-1400.0.29.202)。

谢谢你的回答。

这是因为您打印的是局部变量list的地址(引用),而不是静态存储持续时间数组input的引用。参数如何传递给函数是由实现定义的,你不应该做任何假设。

如果你修改程序,你会看到不同之处:

#include <stdio.h>
#define MAX_SIZE 100
void sum2(float *list, int n);
void sum3(int n, float *list);
float input[MAX_SIZE];
int main(void){
printf(" sum2(input, MAX_SIZE) n");
sum2(input, MAX_SIZE);
printf(" sum3(MAX_SIZE, input) n");
sum3(MAX_SIZE, input);
}
void sum2(float *list, int n)
{
printf("address of list t= %pn", (void *)&list);
printf("address kept in list t= %pn", (void *)list);
printf("address of input t= %pnn", (void *)input);
}
void sum3(int n, float *list){
printf("address of list t= %pn", (void *)&list);
printf("address kept in list t= %pn", (void *)list);
printf("address of input t= %pn", (void *)input);
}

,输出为:

sum2(input, MAX_SIZE) 
address of list     = 0x7ffff4b9b178
address kept in list    = 0x404060
address of input    = 0x404060
sum3(MAX_SIZE, input) 
address of list     = 0x7ffff4b9b170
address kept in list    = 0x404060
address of input    = 0x404060

相关内容

  • 没有找到相关文章

最新更新