当我尝试运行该程序时,它会崩溃,但会打印出数字。为什么会这样?
void z(int **k)
{
int i;
*k=malloc(20*sizeof(int));
for (i=0;i<20;i++)
*k[i]=10;
}
int main()
{
int *k,i;
z(&k);
for (i=0;i<20;i++)
printf("%d\n",k);
return 0;
}
答案 0 :(得分:4)
问题在于
*k[i]=10;
按优先顺序,它应该是,
(*k)[i] = 10;
订阅运算符的优先级高于间接运算符。见Operator Prececence Rules.
另外,在main的printf中,您正在打印printf("%d\n",k)
。这将打印阵列的基地址。如果你想要你应该使用的值
printf("%d\n",k[i]);