如何在c中为指向char的指针数组分配内存

Posted

技术标签:

【中文标题】如何在c中为指向char的指针数组分配内存【英文标题】:How to allocate memory for an array of pointers to a char in c 【发布时间】:2022-01-15 15:51:51 【问题描述】:

我正在用 c 编写一个程序,但在为指向 char 的指针数组分配内存时遇到了困难,我以后需要对这个数组进行排序。数组应该在其中存储字符,然后我想按字母顺序对这些字符进行排序。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct

    char collection[50]; 
 data_col;

int main(int argc, char const *argv[])

    data_col * array [10] = malloc(sizeof(data_col));

    for (size_t i = 0; i < 10; i++)
    
        scanf("%c", &array[i]->group);
    

    return 0;

【问题讨论】:

您的代码有很多错误,无法猜测您想要实现的目标。请描述你想要什么。至少提供可以编译的代码。 -- 至少描述一下为什么需要指针数组。 编辑问题 @Alessa 为什么你决定需要一个指针数组而不是结构类型的对象数组? 如果要对它进行排序,那么使用指针数组是有意义的;您可以通过交换两个元素的指针而不是交换 50 个字节的数据来交换两个元素。 【参考方案1】:

您可以通过简单地编写以下代码为您的 10 个指针分配内存:

data_col * array[10];

如果你把它放在你程序的最顶层,它是一个全局变量,你可以在你的程序中任何时候使用它,并且指针都为你初始化为空指针。

如果你把它放在一个函数中,那么当函数返回时,内存将被释放/释放。指针将以未初始化/未定义状态开始。

请注意,您仍然需要初始化这 10 个指针中的每一个,然后才能将它们用于任何事情。您可以选择使用malloc 为各个data_col 对象分配空间,或者您可以创建一个data_col 对象数组并让您的指针指向该数组。但是,您的问题与此无关;您的问题只是关于如何为 指针数组 分配内存,而我上面显示的代码成功地为您分配了该内存。

【讨论】:

以上是关于如何在c中为指向char的指针数组分配内存的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何释放类型映射中为 argout 结构数组分配的内存?

指向动态二维字符数组的三重指针的内存分配

在C中为结构指针数组成员分配地址

如何在C中为char**动态分配内存

C语言如何给指针分配内存?

在C中为结构中的单个字符分配内存[重复]