C/C++ 实战笔记1--数组


在实际项目的应用中,常用的数组包括一维、二维、三维和四维数组,其主要应用包括创建/动态创建、初始化/赋值、调用/引用等。

1、一维数组

1.1. 初始化、赋值

//数组长度为常量 _LENGTH
float temp1[_LENGTH] = {0};
float temp2[_LENGTH] = {1, 2, 3, 4, 5};
//数组长度为变量 length
float temp[length];
memset(temp,0,length*sizeof(float));

1.2. 动态开辟内存空间

//开辟空间
float *temp;
*temp = (float*)malloc(length*sizeof(float));
memset(temp,0,length*sizeof(float));
//使用时
temp[0] = 1;
//释放
free(temp);
temp = NULL;

注:在释放时,一定要记得将指针清空,因为free()函数只是释放内存,对指针没有操作,为避免对指针重新分配时的数据错误,需手动将指针置零

  • 使用函数开辟空间和释放
void MallocArray(void** a, int  len)
{
	*a = malloc(len);
	memset(*a, 0, len);
	return;
}

void FreeArray(void* a)
{
	free(a);
	a = NULL;
	return;
}
//使用
MallocArray((void**)&temp,length*sizeof(float));

2、二维数组

2.1. 初始化、赋值

//数组长度为常量 _ROW,_COL
float temp1[_ROW][_COL] = {0};
float temp2[_ROW][_COL] = {{1,2},{1, 2}, {3, 4}, {5,6}};
//数组长度为变量 row,col
float temp[row][col];
memset(temp,0,row*col*sizeof(float));
memset(temp,0,sizeof(temp));

注:1、memset(数组,0,字节长度
2、float temp2[_ROW][_COL] = {{1,2},{1, 2}, {3, 4}, {5,6}};这种方式只能用于初始化,不能用于赋值

2.2. 动态开辟内存空间

  • 方法1
float **temp;
int i ,j;
**temp = (float**)malloc(row*sizeof(float*));
for(i = 0;i <n1;i++ )
{
	*a[i] = (float*)malloc(sizeof(float)*col);
	for(j =0; j <n2; j++)
	{
		a[i][j] = 0;
	}
}

方法1的每行的列与列之间的地址时连续的,行与行之间的地址不连续

  • 方法2
float (*temp)[col] = (float(*)[col])malloc(sizeof(float) * row * col);   //(*temp) 括号不能少,[]优先级高,少了就是指针数组了 

方法2中的每个元素都是连续的,但如以指针的形式给函数传二维数组,要用方法1,方法2会报错。

3、三维数组

3.1. 动态开辟内存空间

int i ,j,k;
float ***a = (float***)malloc(n1*sizeof(float**));
for(i = 0;i <n1;i++ )
{
	**a[i] = (float**)malloc(sizeof(float*)*n2);
	for(j =0; j <n2; j++)
	{
		*a[i][j] = (float*)malloc(sizeof(int)*n3);
		for(k =0;k<n3;k++)
		{
			a[i][j][k] = 0;
		}
	}
}

4、四维数组

4.1. 动态开辟内存空间

int i ,j,k,z;
float ****a = (float****)malloc(n1*sizeof(float***));
for(i = 0;i <n1;i++ )
{
	***a[i] = (float***)malloc(sizeof(float**)*n2);
	for(j =0; j <n2; j++)
	{
		**a[i][j] = (float**)malloc(sizeof(float*)*n3);
		for(k =0;k<n3;k++)
		{
			*a[i][j][k] = (float*)malloc(sizeof(float)*n4);
			for(z = 0;z< n4;z++)
			{
				a[i][j][k][z] = 0;
			}
		}
	}
}

还可以用结构体的方法定义四维数组

//未验证
typedef struct {
    int a[5];
}item;
 
item *ar = (item*)malloc(sizeof(item) * 4);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值