关于数组清空的方式

这个话题的开启是看帖子的时候觉得可以记录一下。

 

简单记录,学习一下

 

数组清空----------这个话题先从我的凤凰组件库phoenix.array.js的当初设计整理一样。

 

 

/*
先看看prototype.js
@version 1.6.0
*/
Object.extend(Array.prototype,{
     clear:function(){
        this.length = 0;
        return this; 
    }
});

 

 

/*
baidu tangram 
version 1.3.9
*/
baidu.array.empty = function(source){
       source.length = 0;
}

 

当然可能有的人会从网上看到一些这样的做法

 

 

/*
类似赋值[]
*/
clean:function(source){
      this.source =  [];
}

 

 

     --------------  2013-5-7 add  splice

 

clean:function(arr){
    arr.splice(0,arr.length);
}

 

 

 

 

总结一下:

 

 

  • 个人觉得从功能实现角度,上面的3个api设计多达到了,能用
  • 但是如果从性能脚本,或者执行速度上个人还是推荐array.length = 0;
  • 方法2和3的区别就是一个保留了array的其他属性,3则是直接赋值创建一个新的空array对象
  • 当然在做arrayapi设计优化的时候,确实存在如ff浏览器和v8等这些内部优化
 
 
 

 

 

<think>好的,我现在需要帮助用户解决如何在C语言中清空数组的问题。用户要求提供方法示例,所以我得先回顾一下C语言中数组的基本操作。首先,数组清空通常指的是将数组的所有元素设置为某个默认值,比如0或者空字符,具体取决于数组的类型。 接下来,我需要考虑不同的清空方法。对于静态数组,也就是在声明时已经确定大小的数组,常用的方法有循环遍历赋值和使用memset函数。循环的方法比较直观,逐个元素赋值,但可能效率较低,尤其是数组很大时。而memset是C标准库中的函数,可以快速将内存块设置为指定的值,但需要注意数据类型,比如对于int数组,memset按字节设置,所以设为0没问题,但设为其他值可能会有问题。 然后,动态数组清空。动态数组是通过malloc等函数分配的,清空时同样可以用循环或memset,但要注意内存的有效性,避免访问已释放的内存。另外,清空后可能需要重新初始化指针,防止悬空指针的问题。 还要考虑多维数组的情况,比如二维数组,可能需要嵌套循环来逐个元素清空,或者使用memset对整个内存块进行操作,但需要确保数组在内存中是连续的。 用户提供的引用中有提到zbuff操作示例,这可能涉及特定的库或框架,但用户的问题比较基础,可能不需要深入这部分,但可以稍微提及。 需要检查是否有常见的错误,比如使用memset时误将非字符数组设置为非0值,或者数组越界。同时,要提醒用户初始化与清空的区别,初始化是在声明时赋予初始值,而清空是在使用过程中重置值。 最后,整理示例代码,确保语法正确,并覆盖不同情况,如一维数组、二维数组、静态和动态数组。同时,解释每种方法的适用场景和注意事项,确保用户理解如何选择合适的方法。</think>在C语言中清空数组主要有三种常用方法,以下将结合示例详细说明: ### 一、静态数组清空方法 1. **循环赋值法** ```c int arr[5] = {1,2,3,4,5}; for(int i=0; i<5; i++){ arr[i] = 0; // 整型数组赋0值 } char str[10] = "hello"; for(int i=0; i<10; i++){ str[i] = '\0'; // 字符数组赋空字符 } ``` 特点:逐个元素赋值,适用于所有类型数组,但效率较低[^2] 2. **memset函数法** ```c #include <string.h> int nums[10]; memset(nums, 0, sizeof(nums)); // 正确:将数组全部字节置0 char buffer[100]; memset(buffer, 0, sizeof(buffer)); // 清空字符串缓冲区 ``` 注意:仅当需要置0或特定字节模式时有效,对非字符类型慎用非0值[^3] ### 二、动态数组清空 ```c int *dyn_arr = malloc(10 * sizeof(int)); // 清空方法 memset(dyn_arr, 0, 10 * sizeof(int)); // 或循环清空 for(int i=0; i<10; i++){ dyn_arr[i] = 0; } ``` 注意:清空后仍需保持有效内存指针[^4] ### 三、二维数组清空 ```c int matrix[3][4]; // 双重循环法 for(int i=0; i<3; i++){ for(int j=0; j<4; j++){ matrix[i][j] = 0; } } // 内存块清零法 memset(matrix, 0, sizeof(matrix)); ``` 特殊说明:二维数组在内存中连续存储,可用memset整体清零 ### 注意事项 1. 浮点数组清空建议使用循环赋值0.0 2. 结构体数组需根据成员类型选择清空方式 3. 已释放内存的数组不可进行清空操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值