带数组的指针函数

时间:2013-06-29 03:24:47

标签: c pointers

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

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)

该函数返回somenthing strange。

X指向位置存储器n,后面指向位置存储器n + 1 ??

2 个答案:

答案 0 :(得分:0)

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

请参阅此帖,其中阐明了difference between pointer and arrays

  

[] - 索引取消引用   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);

答案 1 :(得分:0)

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

m=x[i]+m

x [i]暗示来自数组第一个元素的i索引

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

此函数将数组发送到函数,其中10是数组的大小