前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c 二级指针3种内存分配

c 二级指针3种内存分配

作者头像
py3study
发布2020-01-08 11:25:09
1.3K0
发布2020-01-08 11:25:09
举报
文章被收录于专栏:python3
代码语言:javascript
复制
//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
/*
*实现二级指针
*author:whish
*/
///1.直接分配在栈上 通过char[][]方式
int mainStack()
{
 char array[3][5] ={{'q','w','e','r','b'},{'a','s','d','f','n'},{'z','x','c','v','m'}};
 for(int i = 0;i<3;i++)
 {
 for(int j=0;j<5;j++)
 {
 printf("pa[%d][%d]:%c\t",i,j,*(*(array+i)+j));
 }
 printf("\n");
 }
 return 0;
}
///2.行分配在栈上,列分配到堆上 通过指针数组方式


int mainStackHeap()
{
 char* pa[3];
 for (int i =0 ;i<3;i++)
 {
 pa[i] = (char*) malloc (sizeof(char)*5);
 strcpy(pa[i],"asdf");
 }
 for(i =0 ;i<3;i++)
 {
 for(int j=0;j<strlen(pa[i]);j++)
 {
 printf("pa[%d][%d]:%c\t",i,j,*(*(pa+i)+j));
 }
 printf("\n");
 }
 for(i =0 ;i<3;i++)
 {
 free(pa[i]);
 pa[i] == NULL;
 }
 //free(pa);
 //pa = NULL;  //因为是stack to heap  so can't free pa
 return 0;
}
///3.行分配在堆上,列分配到堆上 通过二级指针方式
int mainHeapHeap()
{
 char** pa =  (char**)malloc(sizeof(char*)*3);
 for (int i=0;i<3;i++)
 {
 char* p = (char*) malloc (sizeof(char)*5);
 pa[i] = p;
 strcpy(p,"asdf");
 }
 for(i =0 ;i<3;i++)
 {
 for(int j=0;j<strlen(pa[i]);j++)
 {
 printf("pa[%d][%d]:%c\t",i,j,*(*(pa+i)+j));
 }
 printf("\n");
 }
 for(i =0 ;i<3;i++)
 {
 free(pa[i]);
 pa[i] == NULL;
 }
 free(pa);
 pa = NULL;
 return 0;
}
///4.测试
int main(int argc, char* argv[])
{
 mainStack();
 printf("------------------\n");
 printf("------------------\n");
 mainStackHeap();
 printf("------------------\n");
 printf("------------------\n");
 mainHeapHeap();
 return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档