0

我有一个问题,我有一个功能,但我不明白具体的事情。功能是:

int F( int* x , int n ){
    int i , m=0
    for (i=0;i<n; i++){
       m=x[ i ] + m;
    }
    return m * m ;
}

我用指针和整数调用函数。后来我做了一个“for”,但我不明白这一行:

 m=x[ i ] + m;

因为 x 是指针而不是数组。

请你帮助我好吗。

然后x指向内存位置,然后指向+1。例如,如果我用

n=10
x=&n
F(x,n)

该函数返回一些奇怪的东西。

X指向位置记忆到n,后来指向位置记忆到n+1??

4

2 回答 2

0

数组表示为连续内存,数组变量被解释为指向该内存基址的指针(例如&(x[0]))。数组偏移语法被翻译成指针算术。

请参阅这篇文章,它阐明了指针和数组之间的区别

[] - 索引解引用 a[b] 等价于 *(a + b)。这意味着 a 和 b 必须是指向数组元素和整数的指针;不一定分别,因为 a[b] == *(a + b) == *(b + a) == b[a]。另一个重要的等价是 p[0] == 0[p] == *p。

该函数可能被等价地声明(也许更清楚):

int F(int x[], int n);

你会这样称呼它:

int data[3] = {1, 2, 3};
int value = F(data, 3);
于 2013-06-29T03:30:46.647 回答
0

由于 x 是一个指针,所以当您将数组传递给函数时,x 指向数组的第一个元素。由于数组是连续分配的内存,因此可以使指针指向数组的连续元素。这就是为什么

m=x[i]+m

x[i] 表示i从数组的第一个元素开始的第 th 索引

main()
{
    int x[10]={1,2,3,4,5,6,7,8,9,10},sum;
    sum=function(x,10);
    return 0;
}

这个函数把数组传给函数,用10,数组的大小

于 2013-06-29T03:38:41.467 回答