#include #include int main() { char *names[5]; // names 数组用来存储地址,每个元素都是 char *, 等同于 5 个字符串 for (int i = 0; i < 5; i++) { printf("请输入第 %d 个姓名: ", i + 1); names[i] = (char *)malloc(32); // 为什么需要申请内存?因为 names[i] 是 char * 类型,需要存储字符串,所以需要申请内存,否则会出现段错误,因为 names[i] 指向的内存是不可写的 // names + i => &names[i] scanf("%s", names[i]); // names + i => &names[i] } for (int i = 0; i < 5; i++) { printf("%s\n", *(names + i)); } printf("%p\n", names[0]); printf("%s\n", names[0]); for (int i = 0; i < 5; i++) { free(names[i]); } printf("%p\n", names[0]); printf("%s\n", names[0]); // 内存释放后,地址不变,但是地址中的内容清空了 return 0; }