c - 使用指针将数组传递给函数

标签 c arrays pointers segmentation-fault

我正在尝试使用指针而不是数组来打印指针数组,但在运行时出现此错误 Segmentation fault:

enter number of element:5
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5
Segmentation fault

这是代码:

#include <stdio.h>
#include <stdlib.h>

int *array;
int n;

void input(int *array,int n);
void display(int *array,int n);
int sum(int *array,int n);

int main (void) {
   int result;
   printf("enter number of element:");scanf("%d",&n);
   input(array,n);  
   display(array,n);
   result=sum(array,n);
   printf("sum of array=%d",result);
   return 0;
}

void input(int *array,int n){
   int j;
   array=(int *)malloc(n*sizeof(int));
   for(j=0;j<n;j++){
        printf("array[%d]=",j);scanf("%d",array+j);
   }
}

void display(int *array,int n){
    int j;

    for(j=0;j<n;j++)
        printf("%d\t",*(array+j));
    printf("\n");
}

 int sum(int *array,int n){
     int sum=0,j;

     for(j=0;j<n;j++)
       sum+=*array+j;

    return sum;
}

如何修复此代码?请有人向我解释该代码有什么问题。

最佳答案

变量 array 是函数 input 中的局部变量。

因此,用array = ... 设置它是没有意义的,因为这个赋值只在函数的内部 生效。您通常应该将其地址 (&array) 传递给需要更改它的任何函数。

在您的特定示例中,您还有一个全局变量 array,因此解决您的问题的一个快速方法是简单地调用函数 input 而不传递变量 数组作为参数:

void input(int n)
{
    ...
    array = (int*)malloc(n*sizeof(int));
    ...
}

int main()
{
    ...
    input(n);
    ...
}

请注意,这是一个“肮脏”的解决方法,您通常应该努力避免使用全局变量。

关于c - 使用指针将数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940673/

相关文章:

C 命令行应用程序 : how to programatically move cursor

python - DataFrame 中系列的平均值

javascript - 如何循环数组显示表格所有行的所有数据?

pointers - 如何以并行方式传递指针的引用?

c - 释放数组的第一个元素

c - cairo 上下文对象 cr 在哪里声明?

python - 变量如何在 Python 中工作?

c++ - char指针的多维数组

c - 如果一个单词截断一个 int 会发生什么?

java - 在并行数组中搜索匹配值