C中指针星的用法

Sai*_*ait 3 c pointers

我问了一个问题:使用C通过引用传递数组.我意识到我的问题是在C中使用指针星.最后事实证明,这个方法适用于我的程序:

#include <stdio.h>

void FillArray(int** myArray)
{   
     *myArray = (int*) malloc(sizeof(int) * 2);

     (*myArray)[0] = 1;
     (*myArray)[1] = 2;
}

int main()
{
     int* myArray = NULL;
     FillArray(& myArray);  
     printf("%d", myArray[0]);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,每件事情都很好.然后,我修改了FillArray()函数,如下所示,以获得更好的代码可读性:

#include <stdio.h>

void FillArray(int** myArray)
{
     int* temp = (*myArray);

     temp = (int*) malloc(sizeof(int) * 2);
     temp[0] = 1;
     temp[1] = 2;
}

int main()
{
     int* myArray = NULL;
     FillArray(& myArray);  
     printf("%d", myArray[0]);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,我在printf行遇到以下运行时错误:

Trial.exe中0x773115de处的未处理异常:0xC0000005:访问冲突读取位置0x00000000.

尽管我不是C专家,但修改它似乎是合法的.但是,显然它不起作用.语法有点混乱吗?我在这里想念一下吗?

谢谢你的有用答案,

SAIT.

Dan*_*her 5

temp获取地址的副本myArray,然后你分配一些malloced内存temp,所以原来的任务是没有意义的,并没有持久的影响.然后修改malloced内存,但这根本不会改变myArray.要改变myArraymain,你必须分配

*myArray = temp;
Run Code Online (Sandbox Code Playgroud)

在结束时FillArray.

void FillArray(int** myArray)
{
     int* temp;
     temp = (int*) malloc(sizeof(int) * 2);
     temp[0] = 1;
     temp[1] = 2;
     *myArray = temp;
}
Run Code Online (Sandbox Code Playgroud)

做你想要的.