大家好,首先感谢各位提供帮助。 现在我想知道双指针。我正在做这样的代码:
int main()
{
int **a;
a = (int*)malloc(sizeof(*int)*5);
for (i=0;i<5;i++)
{
a[i] = malloc(sizeof(int)*3);
}
}
现在我不知道我是否正确行事。如何在这种类型的数组中放置值?任何人都可以用例子解释这个概念吗?提前谢谢。
答案 0 :(得分:4)
好吧,你已经分配了一个等价的数组:
int a[5][3];
所以输入值就是这样:
a[0][0] = 1234;
将值放入第一行的第一列和
a[4][2] = 9999;
会将另一个值放入最后一行的最后一列。
由于您使用的是malloc,因此您还应该从i = 0到4循环[i],free(a[i]);
然后free(a);
或者您的程序会泄漏内存。
答案 1 :(得分:3)
好吧......你在这里所拥有的基本上是一个指针指针,即一个地址的地址。处理数组时可以使用这种变量。
代码的前两行相当于:
int* a[5]; // Declaration of an array of 5 integer pointers (a[0] till a[4]).
“纯”C代码不使用变量作为数组的大小,因此当您想要动态编辑数组的大小时,可以使用malloc。
意思是,如果在您的代码中,您不打算更改数组的大小,那么您将使用一种非常复杂的方法来实现一个非常简单的目标。你可以输入:
int a[5][3];
但是如果你不知道你的数组的大小,你必须使用mallocs(然后,免费)。你在做什么,基本上是:
现在你已经完成了这个,你可以正常使用你的数组。例如:
a[1][0] = 1;
意味着:在第一个数组[1]中,第一行[0]为1。
与没有mallocs的上述标准声明的唯一区别在于,由于您分配了内存,因此您必须释放它。这就是为什么你不想丢失你的变量**。在函数结束时,指针到指针变量将被销毁,但不会销毁你分配的内存。