当我运行此代码时,它会给我一个分段错误错误。
#include <stdio.h>
#include <stdlib.h>
void function(int **A);
void main()
{
int *A = NULL;
int i = 0;
A = (int *) malloc(70 * sizeof(int));
function(&A);
for (i = 0; i < 10; i++){
printf("A is : %d\n", A[i]);
}
free(A);
}
void function(int **A){
int i = 0;
for (i = 0; i < 10; i++){
*A[i]=i*2;
}
}
答案 0 :(得分:3)
*A[i]=i*2;
应该是
(*A)[i]=i*2;
因为在应用数组下标运算符([]
)之前需要取消引用指针。在您当前的代码中,根据operator precedence table,[]
的优先级高于取消引用运算符(*
)。所以你需要括号。
malloc
malloc
的结果,看看是否成功<小时/> 如果将指针传递给数组会更简单,即使用
function(A);
而不是传递A
的地址并将function
的签名更改为:
void function(int *A)
并使用
A[i]=i*2;
在for
的{{1}}循环中。由于function
中的A
指向function
中数组A
的第一个元素的地址,因此您对main
中A
的内存所做的任何更改{1}}指向,将反映在function
中的数组A
。