我在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 ;
}
答案 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;
}
答案 2 :(得分:0)
只需让代码正常运行,代码的最小更改就会更改为*v[i] = 0 ;
到(*v)[i] = 0 ;