【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、指針數組
- 二、二維數組
- 三、自定義二維指針內存
前言
繪制如下 333 種二級指針的內存模型 :
// I. 指針數組 char *p1 []= {"12", "ab", "34"};// II. 二維數組 char p2[3][4] = {"12", "ab", "34"};// III. 自定義二維指針內存 int i = 0, num=3; char **p3 = (char **) malloc(sizeof(char) * 3); for(i = 0; i < num; i++) {p[i] = (char *)malloc(sizeof (char) * 4);sprintf(p[i], "%d%d", i + 1, i + 1); }一、指針數組
繪制如下代碼內存結構圖 :
// I. 指針數組 char *p1[] = {"12", "ab", "34"};指針數組 內存結構圖 :
在 棧內存 中 , 是一個 指針數組 , 數組中有 333 個元素 , 都是指針數據類型 ;
指針 指向的 位置 是 全局區 的 常量區 ;
二、二維數組
繪制 二維數組 的內存模型圖 :
// II. 二維數組 char p2[3][4] = {"12", "ab", "34"};繪制結果如下 : 上述 二維數組 都在 棧內存中 ,
- 每個 一維數組 都占 444 字節 ;
- 一維數組中 , 默認值都為 ‘\0’ 字符 ;
- 注意 棧內存 生長方向是 從 高地址 -> 低地址 ;
- 注意 數組 的內存方向是從 低地址 -> 高地址 , p[0] 在低地址 , p[1] 在高地址 ;
- 全局區存在 初始化時 涉及到 的 相應字符串 常量 ;
三、自定義二維指針內存
繪制 自定義二維指針內存 的內存模型圖 :
// III. 自定義二維指針內存 int i = 0, num=3; char **p3 = (char **) malloc(sizeof(char) * 3); for(i = 0; i < num; i++) {p[i] = (char *)malloc(sizeof (char) * 4);sprintf(p[i], "%d%d", i + 1, i + 1); }繪制結果如下 : 棧內存 中 只有一個 二維指針 , 其指向的 一維指針 都在 堆內存中 , 一維指針 也是指向 堆內存 中的數據 ;
注意 指針 指向 的是 內存塊的 低地址 , 不要指錯了位置 ;
全局區 中的 常量區 中 , 存在初始化的 字符串 常量 數據 ;
總結
以上是生活随笔為你收集整理的【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】二级指针作为输入 ( 自定义
- 下一篇: 【C 语言】多级指针 ( 在函数中生成