我有一个问题,我有一个功能,我不明白具体的事情。功能是:
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 ??
答案 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是数组的大小