1. 完整示例代码:
#include <stdio.h>
#include <stdlib.h> // 使用 malloc 和 free 函数
// malloc 申请动态内存!
// 1. 静态内存分配
void static_memory_allocation() {
char name[32];
printf("Enter your name: ");
// scanf("%s", &name); &name 明确指定存放的位置是 地址!
// scanf("%s", name); name 编译器会自动,存放到第一个元素的地址上。
scanf("%s", &name);
printf("Hi, %s!\n\n", name);
}
// 2. 动态内存分配
void dynamic_memory_allocation() {
char *name2;
// name2 = (char*)malloc(32); // 申请 32 字节的内存
// name2 = malloc(32); // 申请 32 字节的内存. 此时的 name2 是一个指针
name2 = malloc(32); // 申请 32 字节的内存. 此时的 name2 是一个指针
printf("Give your new name: ");
scanf("%s", name2); // &name2 是指针的地址! 这里直接用指针!
printf("Hey, %s!\n\n", name2);
// 使用了 malloc 申请的内存,必须使用 free 释放内存
free(name2);
}
int main() {
static_memory_allocation();
dynamic_memory_allocation();
return 0;
}
2. 几个问题记录一下:
1. scanf("%s", &name); 与 scanf("%s", name) 的区别? 加不加 “&” 符号?
- scanf("%s", &name); &name 明确指定存放的位置是 地址!
- scanf("%s", name); name 编译器会自动,存放到第一个元素的地址上。
2. name2 = (char*)malloc(32); 与 name2 = malloc(32); 的区别