如何在函数中使用数组指针?

bbi*_*egt 1 c arrays pointers

我必须编写一个程序,它具有一个函数,该函数对数组中的所有正数进行求和,但使用函数参数数组作为指针.当我尝试调用sum函数时,在main函数中出现问题.这是我的源代码:

#include <stdio.h>
#include <conio.h>
int posit(int *x[], int n){
  int s=0;
  for(int i=0; i<n; i++){
    if(*x[i]>0){
      s=s+*x[i];
    }
  }
  return s;
}
int main(){
  int k;
  scanf("%d",&k);
  int a[k];
  for(int i=0; i<k; i++){
    scanf("%d",&a[i]);
  }
  int b=posit(&a,k);
  printf("%d\n", b);
  getch();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 5

当一个数组传递给一个函数时,它会衰减到指向它的第一个元素的指针.将函数的签名更改为:

int posit(int* x, int n){ /* Equivalent to 'int posit(int x[], int n)' */
Run Code Online (Sandbox Code Playgroud)

并将函数中数组的元素访问语法更改*x[i]为just x[i].调用函数:

int b=posit(a,k);
Run Code Online (Sandbox Code Playgroud)

值得一提的另一点是检查返回值scanf(),该返回值返回所做的赋值数,以确保&a[i]实际分配,并且程序随后不使用未初始化的变量.

您可能会发现C FAQ 的Arrays and Pointers部分很有用.