面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// 动态分配能存放5个整数的内存空间
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 存入5个整数
for (int i = 0; i < 5; i++) {
*(ptr + i) = i + 1;
}
// 输出数组内容
printf("数组内容: ");
for (int i = 0; i < 5; i++) {
printf("%d ", *(ptr + i));
}
printf("\n");
// 释放内存空间
free(ptr);
ptr = NULL;
return 0;
}
指针在内存管理中的作用解释:
- 动态内存分配:
malloc
函数用于在堆上分配指定大小的内存空间。它返回一个指向分配内存起始地址的指针ptr
。通过将返回值强制转换为int *
类型,我们可以使用这个指针来操作这块内存,就像它是一个普通的整数数组指针一样。如果malloc
分配失败,会返回NULL
,我们需要进行错误处理。 - 访问和操作内存:通过指针算术运算,我们可以像访问数组元素一样访问动态分配内存中的每个整数。例如
*(ptr + i)
等同于ptr[i]
,这样我们就可以存入和读取数据。 - 释放内存:使用完动态分配的内存后,需要调用
free
函数来释放它,防止内存泄漏。free
函数接受一个先前由malloc
、calloc
或realloc
分配的内存地址指针作为参数。释放内存后,为了避免悬空指针(指向已释放内存的指针),我们将指针设置为NULL
。