前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

作者头像
韩曙亮
发布2023-03-29 21:21:42
2.4K0
发布2023-03-29 21:21:42
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、字符串 一级指针 内存模型


代码语言:javascript
复制
#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;
}

绘制上述代码的 内存四区 模型 ;

1、指定大小字符数组

下面的代码中 , 在栈内存中 , 声明 数组 , 数组大小

5

字节 , 为其赋值时 , 使用了 “abc” 字符串常量 ;

在 全局区 的 常量区 存放 “abc” 字符串常量 ;

使用 “abc” 常量为 数组 赋值 , 注意数组的最后一位是 \0 字符 ;

代码语言:javascript
复制
    // 栈内存数组 指定大小
    char array[5] = "abc";
在这里插入图片描述
在这里插入图片描述

2、未指定大小字符数组

在 栈内存 中 , 声明 不指定大小的 字符数组 , 初始化 “123” 字符串 ;

在 全局区 的 常量区 中 , 存放 “123” 常量字符串 ;

在 栈区 的 array2 数组中 , 存放 “123” 字符串内容 , 注意最后的 \0 字符 , 该数组大小

4

字节 ;

代码语言:javascript
复制
    // 栈内存数组 不指定大小
    char array2[] = "123";
在这里插入图片描述
在这里插入图片描述

3、指向常量字符串的指针

在 栈内存 中 , 定义 局部变量 指针 p , 没有为该指针分配内存 , 该指针指向 字符串常量 “def” ;

在 全局区 的 常量区 中 , 定义 字符串常量 “def” ;

代码语言:javascript
复制
    // 定义指针 , 使用字符串赋值
    char *p = "def";
在这里插入图片描述
在这里插入图片描述

4、指向堆内存的指针

先在 堆内存 中 , 分配 5 字节内存 ;

然后 在 全局区 的常量区 中 , 定义 字符串常量 “456” ;

最后 将 字符串常量 “456” 拷贝到 堆内存 分配的 内存中 ;

代码语言:javascript
复制
    // 定义指针 , 在堆内存中分配 5 字节空间
    char *p2 = malloc(5);

    // 将字符串拷贝到堆内存中
    strcpy(p2, "456");
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、字符串 一级指针 内存模型
    • 1、指定大小字符数组
      • 2、未指定大小字符数组
        • 3、指向常量字符串的指针
          • 4、指向堆内存的指针
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档