我的代码有一个array
。
为什么array
的地址改变了?
下面是创建示例数据集的代码:
#include <stdio.h>
#define MAX_SIZE 50
float sum(float [], int);
float input[MAX_SIZE], answer;
int i;
void main(void){
for(i=0; i < MAX_SIZE; i++){
input[i] = i;
}
printf("address of input = %pn", input);
sum(input, MAX_SIZE);
}
float sum(float list[], int n){
printf("value of list = %pn", list);
printf("address of list = %pnn", &list);//error. diffrent address
return 0;
}
下面是样本数据集:
address of input = 004070A0
value of list = 004070A0
address of list = 0061FF00
下面是期望的结果:
- 我想要的第一个
list
地址和第二个list
地址 - 因为它们认为它们指向相同的
list
地址。
关于真实数据集的说明:
- 你不必担心MAX_SIZE的大小。
- 这个代码是通过visual studio代码创建的。 这个代码是C语言编写的。
这个问题解释了list
中的地址和&list
中的地址是相同的,但是我的代码不一样。
input
是一个数组。如果在表达式中使用数组,而不是作为sizeof
的操作数,作为一元&
的操作数,或者作为用于初始化数组的字符串字面值,它将自动转换为指向其第一个元素的指针。因此,在sum(input, MAX_SIZE)
中,第一个参数是指向input[0]
的指针。
float sum(float list[], int n)
声明了一个有两个形参的函数。float list[]
名义上声明了一个数组。然而,作为数组声明的形参会自动调整为指针。因此,这个声明相当于float sum(float *list, int n)
,而list
是一个指针。
调用函数时,其形参是与实参分开的不同对象。每个形参都用传递给它的实参值初始化。在函数内部,&list
生成参数的地址。它不产生形参的值,该值是指向input[0]
的指针。