更改函数c中的数组

时间:2013-12-15 15:19:22

标签: c pointers

我在C上用指针做了一些练习,因为我遇到了一些问题。我必须使用void函数更改数组中的某些值,但是当我运行代码时,它会返回一个段错误。 这是代码:

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

void change( int **v , int l ) {

    for ( int i = 0 ; i < l ; i++ ) 
                 *v[i] = 0 ;

 }

 int main ( int argc , char** argv ) {

           int *v , l ;
           scanf("%d",&l) ;
           v = (int*) malloc(sizeof(int)*l) ;

           for ( int i = 0 ; i < l ; i++ ) 
                    scanf("%d",&v[i]) ;

           change( &v , l ) ;

           for ( int i = 0 ; i < l ; i++ ) 
               printf("%d ",v[i]) ;

           return 0 ;
}

3 个答案:

答案 0 :(得分:4)

变化:

void change( int **v , int l )

void change( int *v , int l )

然后

*v[i] = 0 ;

 v[i] = 0 ;

然后

change( &v , l ) ;

change( v , l ) ;

您不需要使用指向int的指针来更改数组元素,只需将指针传递给数组的第一个元素即可。

答案 1 :(得分:0)

试试这个

#include <stdio.h>
#define MAX 20
typedef int Values[MAX];

int changeArr(int vals2[]) {
    vals2[0] = 200;
    vals2[1] = 100;
    printf("%d and ", vals2[0]);
    printf("%d\n", vals2[1]);
    return 0;
}   

int main (int argc, char *argv[]) {

    Values vals;
    changeArr(vals);
    printf("%d and ", vals[0]);
    printf("%d\n", vals[1]);
    return 0;

}

#include <stdio.h>
#define MAX 20
typedef int Values[MAX];

int changeArr(Values *vals2) {
    (*vals2)[0] = 200;
    (*vals2)[1] = 100;
    printf("%d and ", (*vals2)[0]);
    printf("%d\n", (*vals2)[1]);
    return 0;
}   

int main (int argc, char *argv[]) {

    Values vals;
    changeArr(&vals);
    printf("%d and ", vals[0]);
    printf("%d\n", vals[1]);
    return 0;

}

来源:How can I change an int array in a function

答案 2 :(得分:0)

只需让代码正常运行,代码的最小更改就会更改为*v[i] = 0 ;(*v)[i] = 0 ;