#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
* 函数入口
*/
int main(int argc, char **args)
{
// 栈内存数组 指定大小
char array[5] = "abc";
// 栈内存数组 不指定大小
char array2[] = "123";
// 定义指针 , 使用字符串赋值
char *p = "def";
// 定义指针 , 在堆内存中分配 5 字节空间
char *p2 = malloc(5);
// 将字符串拷贝到堆内存中
strcpy(p2, "456");
system("pause");
return 0;
}
绘制上述代码的 内存四区 模型 ;
下面的代码中 , 在栈内存中 , 声明 数组 , 数组大小
字节 , 为其赋值时 , 使用了 “abc” 字符串常量 ;
在 全局区 的 常量区 存放 “abc” 字符串常量 ;
使用 “abc” 常量为 数组 赋值 , 注意数组的最后一位是 \0
字符 ;
// 栈内存数组 指定大小
char array[5] = "abc";
在 栈内存 中 , 声明 不指定大小的 字符数组 , 初始化 “123” 字符串 ;
在 全局区 的 常量区 中 , 存放 “123” 常量字符串 ;
在 栈区 的 array2
数组中 , 存放 “123” 字符串内容 , 注意最后的 \0
字符 , 该数组大小
字节 ;
// 栈内存数组 不指定大小
char array2[] = "123";
在 栈内存 中 , 定义 局部变量 指针 p
, 没有为该指针分配内存 , 该指针指向 字符串常量 “def” ;
在 全局区 的 常量区 中 , 定义 字符串常量 “def” ;
// 定义指针 , 使用字符串赋值
char *p = "def";
先在 堆内存 中 , 分配 5 字节内存 ;
然后 在 全局区 的常量区 中 , 定义 字符串常量 “456” ;
最后 将 字符串常量 “456” 拷贝到 堆内存 分配的 内存中 ;
// 定义指针 , 在堆内存中分配 5 字节空间
char *p2 = malloc(5);
// 将字符串拷贝到堆内存中
strcpy(p2, "456");