使用void返回数组的内存地址

时间:2016-01-20 04:31:07

标签: c pointers

当我尝试运行该程序时,它会崩溃,但会打印出数字。为什么会这样?

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;
}

1 个答案:

答案 0 :(得分:4)

问题在于

*k[i]=10;

按优先顺序,它应该是,

(*k)[i] = 10;

订阅运算符的优先级高于间接运算符。见Operator Prececence Rules.

另外,在main的printf中,您正在打印printf("%d\n",k)。这将打印阵列的基地址。如果你想要你应该使用的值

printf("%d\n",k[i]);