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

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

最佳答案

问题出在

*k[i]=10;

按照先后顺序,应该是,

(*k)[i] = 10;

下标运算符的优先级高于间接运算符。参见 Operator Prececence Rules.

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

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

关于c - 使用 void 返回数组的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34891662/

相关文章:

c++ - 使用指针时表达式必须具有类类型

c++ - 在类中存储指针

c++ - 从基指针复制派生类的构造函数

c++ - 如何在 C++ 中用数组和指针实现插入排序算法?

比较 C/C++ 中的指针(字符数组)

c++ - 在没有源代码的情况下粘合 C 和 C++ 目标文件

C:通过外部链接初始化全局常量

c - gcc 按位奇数行为

c - 在 Solaris 中的父进程和子进程之间共享内存(在 C 中)

c - C 中的 "sh: fork: retry: no child processes"问题