建立一个长度未知的数组

<pre name="code" class="cpp">#include<iostream>
using namespace std;
int main(){
	int i,n;
	cin>>n;
	int *arr= new int[n];//建立一个大小为n的数组
	arr[0]=1;

	//以下代码对一个长度为n的数组第二位开始依次做计算,并输出最后一个值结果
	for(i=1;i<n;i++){
		arr[i]=arr[i-1]+i;
	}
	cout<<arr[n-1];
	//在下一行释放内存空间
	delete []arr;
        arr=NULL;
	return 0;
}




                
### 使用HAL库处理不定长度数组的方法 在STM32 HAL库中,虽然其主要功能是对外设进行抽象化操作,但它也可以用于数据处理场景,比如处理不定长度数组。通过结合HAL库中的函数以及C语言的标准特性,可以实现对动态大小的数据缓冲区的操作。 以下是具体方法和示例代码: #### 动态内存分配与释放 为了支持不定长度数组,在嵌入式环境中通常会使用`malloc()`或`calloc()`来动态分配内存空间,并在完成后调用`free()`释放资源。需要注意的是,这种做法可能会增加堆管理复杂度并可能导致碎片化问题,因此需谨慎设计。 ```c #include "stm32f1xx_hal.h" // 定义全局变量存储指针地址 uint8_t *dynamicArray = NULL; void initDynamicArray(uint16_t length) { // 如果之前已分配,则先释放旧有内存 if (dynamicArray != NULL) { free(dynamicArray); dynamicArray = NULL; } // 分配新内存区域 dynamicArray = (uint8_t *)malloc(length * sizeof(uint8_t)); if (!dynamicArray) { Error_Handler(); // 错误处理机制,例如停止程序运行或者记录日志 } } ``` 此部分实现了基本的动态数组初始化逻辑[^1]。 #### 数据填充与读取 一旦成功创建一个可变尺寸的数组之后,就可以像对待常规静态定义的一样对其进行访问了;不过要注意边界条件以防越界访问引发异常行为。 下面展示了一种简单的写入模式到该类型的容器当中去的例子: ```c void fillDataIntoArray(uint16_t dataLength, uint8_t valueToFill) { for(int i=0;i<dataLength && dynamicArray!=NULL;++i){ *(dynamicArray+i)=valueToFill; } } // 测试打印内容至串口或其他显示媒介上验证结果正确与否 void printArrayContentOverUART(UART_HandleTypeDef* huart,uint16_t count){ char buffer[5]; for(int idx=0 ;idx<count&&dynamicArray!=NULL; ++idx ){ sprintf(buffer,"%d ",*(dynamicArray+idx)); HAL_UART_Transmit(huart,(uint8_t*)buffer,strlen(buffer),1000); } } ``` 上述片段展示了如何向先前建立起来的空间填充值以及怎样经由USART接口输出这些数值给外部观察者查看确认无误[^3]. 最后记得当不再需要这个对象的时候应该及时销毁它以免造成不必要的浪费甚至崩溃风险. ```c void deinitDynamicArray(){ if(NULL != dynamicArray){ free(dynamicArray); dynamicArray=NULL; } } ``` 以上就是关于运用HAL库针对未知规模列表执行相应动作的一个概括介绍及其配套源码示范[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值