#include 发布时间:2019-09-13 09:26:30编辑:auto阅读(1527) //#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.行分配在栈上,列分配到堆上 通过指针数组方式 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; }
上一篇:
CSharp基础知识3-循环语句 下一篇:
linux下ftp服务阶段实验(3) 47848 46401 37288 34737 29319 25976 24920 19954 19549 18032 5795° 6419° 5935° 5964° 7070° 5918° 5949° 6442° 6405° 7783° c 二级指针3种内存分配
int mainStackHeap()
{