c语言 - 为什么地址在同一列表中时不同?



我的代码有一个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]的指针。

最新更新