二维数组的三种内存模型

本文详细探讨了C语言中二维数组的三种内存模型,包括连续存储、行优先存储和列优先存储方式,深入理解这些内存布局对于优化程序性能和有效管理内存至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//把p1和p2中的字符串拼接到p3中
//p3每行的长度不固定
int myStrCat(char* p1[],int num1,char p2[10][30],int num2,char*** p3/*out*/,int* num3){
	char** pTmp = NULL;//辅助指针
	pTmp = (char**)malloc(sizeof(char*)*(num1+num2));
	int row_len=0;
	//p1数据copy到p3
	for(int i=0;i<num1;i++){
		row_len = strlen(p1[i]);
		pTmp[i] = (char*)malloc(sizeof(char)*(row_len+1));//注意多分配一字节存'\0',否则释放内存出错
		strcpy(pTmp[i],p1[i]);
	}
	//p2数据copy到p3
	for(int i=0;i<num2;i++){
		row_len = strlen(p2[i]);
		pTmp[i+num1] = (char*)malloc(sizeof(char)*(row_len+1));//注意多分配一字节存'\0',否则释放内存出错
		strcpy(pTmp[i+num1],p2[i]);
	}
	*num3 = num1+num2;
	*p3 = pTmp;//挂上
	return 0;
}

int freeMyStrCat(char*** p,int row){//释放二维数组
	char** tmp = *p;
	for(int i=0;i<row;i++){
		if (tmp[i]!=NULL)
		{
			free(tmp[i]);
			tmp[i] = NULL;
		}
	}
	if(*p!=NULL){
		free(*p);
		*p = NULL;
	}
	return 0;
}

void main() {
	//二维数组的三种内存模型:
	char* p1[]={"aaaaaaaaaa","vvvvvv","dddddd"};//指针数组
	char p2[10][30] = {"1111111","22222","3333333"};//二位数组:做参数退化为数组指针:char (*p2)[30]
	char** p3 = NULL;//二级指针
	int num=0;
	myStrCat(p1,3,p2,3,&p3,&num);
	for(int i=0;i<6;i++){
		puts(p3[i]);
	}
	freeMyStrCat(&p3,num);
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值