重新分配指针指针

时间:2015-12-16 13:06:03

标签: c

作为我们计算机科学课程的一部分(使用C),我们将使用指针构建一个非常浪费的系统 由于此时我们不允许使用结构,因此我们只使用指针来表示动态数组。

我创建了动态数组**学生并为其分配了空间。 在这一点上,我发送这个动态数组(**学生)到一个功能,将其发送到另一个功能(我发送和学生,所以我可以通过地址更改它们)

我的问题是,我不知道(显然 - 经过多次尝试)如何将空间重新分配给这个动态数组

具体来说,因为我发送了2次数组: 我的第一个功能是接收***学生 我的第二个功能是接收****学生

我尝试按以下方式重新分配空间(目前我在SECOND功能中)

*students = (char**)realloc(*students, 2 * sizeof(char*));
*students[1] = (char*)malloc(sizeof(char))
这似乎是这样做的方式 - 显然我错了 感谢任何帮助:)

编辑:

如果我这样做,程序将会运行:

**students = (char**)realloc(**students, 2 * sizeof(char*));

但是我无法正确使用malloc ..

我很感激我的问题背后的理解,而不仅仅是一个解决方案,所以我可以学习下一次试验。

1 个答案:

答案 0 :(得分:0)

  

我创建了动态数组**学生并为其分配了空间   它。在这一点上,我发送这个动态数组(**学生)到一个   将它发送给另一个功能的功能(我发送和学生,所以我可以   按地址更改)   ...   具体来说,因为我发送了2次数组:我的第一个功能   接收***学生,我的第二个功能接收****学生

多次获取数组指针的地址(即void ANOTHER_function(char ***students) { *students = realloc(*students, 2 * sizeof **students); // room for 2 char * (*students)[1] = malloc(sizeof *(*students)[1]); // room for 1 char } void a_function(char ***students) { ANOTHER_function(students); // no need for address operator & here } int main() { char **students = malloc(sizeof *students); // room for 1 char * students[0] = malloc(sizeof *students[0]); // room for 1 char a_function(&students); } )是没有意义的,因为我们已经有了重新分配数组的方法:

*

因此,我们在这里任何地方都不需要超过三个ANOTHER_function(char ****students)

当你有 *students = (char**)realloc(*students, 2 * sizeof(char*)); 及其中

*students

char ***的类型为(char**)且与右侧的*students不符 - 幸运的是,因为mainstudents的地址s **students = (char**)realloc(**students, 2 * sizeof(char*)); 而不是它的价值。

malloc()
在这种情况下,

是正确的(尽管过于复杂);新元素的相应 (**students)[1] = malloc(sizeof *(**students)[1]); 将是

{{1}}