C语言返回动态分配内存的地址

  • Post category:C

首先,动态分配内存指的是在程序运行时根据需要分配内存,而不是在编译时确定静态内存分配。在C语言中,动态内存的分配和释放都需要使用到malloc() / calloc() 和 free() 函数。

如果需要返回动态分配内存的地址,可以定义一个指针变量来存放动态分配内存的首地址,然后将该指针作为返回值。

以下是一个简单的示例代码:

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

int* get_array(int size) {
   int* arr = (int*) malloc(size * sizeof(int));
   return arr;
}

int main() {
   int* ptr = get_array(5);

   for(int i = 0; i < 5; i++) {
       *(ptr + i) = i;
       printf("%d ", *(ptr + i));   
    }
    free(ptr);
    return 0;
}

在上述代码中,函数get_array() 接收一个整型参数size,该函数使用malloc()函数动态分配一个大小为size的int型数组,并返回该动态数组的首地址arr。在主函数main()中,我们使用指针ptr存放get_array()函数的返回值,然后使用指针*ptr来遍历并输出数组元素的值,最后使用free()函数释放分配的动态内存。

另外一个示例:

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

char* get_string() {
   char str[20];
   printf("请输入一个字符串: ");
   scanf("%s", str);
   char* p = (char*) malloc(20 * sizeof(char));
   int i = 0;
   while(str[i]) {
       *(p + i) = str[i];
       i++;
    }
    *(p + i) = '\0';
    return p;
}

int main() {
   char* str = get_string();
   printf("你输入的字符串是: %s\n", str);   
   free(str);
   return 0;
}

在该示例中,函数get_string()允许用户输入一个字符串,然后使用malloc()函数动态分配一个大小为20的char型数组,并将输入字符串中的每个字符复制到该数组中,最后将指针变量p作为返回值,指向动态分配内存的首地址。在主函数main()中,我们使用指针str接收get_string()函数的返回值,并将结果输出,最后使用free()函数释放通过malloc()函数分配的内存。

总之,返回动态分配内存的地址需要在函数内动态分配内存,将分配后的有效地址返回给函数调用方,在调用方使用完该内存后需要使用free()函数及时释放内存。