什么是C中的自由指针?

Cha*_*ati -2 c arrays pointers

我了解到有两种方法可以在C中声​​明一个数组:

int array[] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

和:

int* arr = malloc(3*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

为什么arr被称为自由指针?为什么我不能更改数组中包含的地址,而我可以使用数组?

unw*_*ind 5

正如评论中所说,你从一个不好的来源学到了不正确的东西.

在第二种情况下,arr不是数组,它是一个指针.一个指针(如果分配成功)恰好包含一个可以容纳三个ints 的内存块的地址,但这不是一个数组.

这种混淆可能来自于数组在某些情况下"衰减"到指针的事实,但这并不能使它们等效.