c二级指针3种内存分配
//#include "stdafx.h"
麻阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
#include
#include
#include
/*
*实现二级指针
*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 { 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 { 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; }
分享标题:c二级指针3种内存分配
转载源于:http://scyanting.com/article/ipsjie.html