java中类似memset的函数是什么? 各位大侠都在哪里呢?Arrays好像不行啊看看吧,基础问题啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jav.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)这个方法你应该明白做了,详细可看java.lang.System的API,给分吧! 楼上 : 你的那个问题我已经给分 可是这个问题,我觉得还是有问题 比如 int a[] = new int[90] 然后我要给它全部赋成-2 那用你给的函数(我以前试过),我是不是要先作一个90个-2的数组,再实现给a赋值的目的呢?能不能说的详细一些,多谢. Arrays.fill(Object[] objs, Object obj); 首先,说明一个问题,memset不能对int数组赋初值:memset()函数只能对在内存中连续分配的数据进行赋值,而且是对每个byte赋值。考虑下面的C++程序: char *p = new char[90]; memset((void *)p, -2, 90);没问题,可以把90个char都赋成-2,因为C++里的char是一个byte(8bit);在看看下面的c++程序: int *p = new int[90]; memset((void *)p, -2, 90);这就有问题了,它不能把数组里的每个int数据都赋成-2,实际上这样做的结果是:前22个int数据都是:0xFEFEFEFE,第23个是0xFEFEXXXX(X表示未知);剩下的int全都是未知;为什么会这样,因为每个int是4个byte,90个int就是360个byte,memset()只对前90个byte赋值。而-2用16进制表示正好是0xFE。由此可见,memset()只能对连续的byte赋值,如果需要赋值的数组不是char类型的,那么就不会得到预期的结果。所以要对int数组赋初值,用memset是不行的,除非赋值成0。唯一的办法还是用循环,一个一个来赋值。同样的道理对于long型数组,short型数组,memset也不能正确的赋初值。再来看看你的标题里的问题,可以明确的告诉你,java里没有类似c里的memset函数。原因很简单,memset可以直接操作内存,而java不能直接操作内存。java里的数组数据是不是在内存中连续分配的,这个我也不清楚,可能与JVM的实现有关,不同的JVM可能有不同的实现。所以java语言没有提供象memset这样的函数。但是,java里对于数组的处理有一个专门的工具类:java.util.Arrays这个类提供了5个功能:1,将数组转换成java.util.ArrayList类型;【asList()】2,数组的排序;【sort()】3,数组的二分查找;【binarySearch()】4,两个数组的比较;【equals()】5,给数组赋初值;【fill()】第5个功能正是你需要的,实际上这个方法是对数组里的每个数进行循环赋值,如果有兴趣,可以看看它的源码。 一个关于父类引用调用子类和this的使用 Java如何获取JFrame一个点颜色? 什么编码可以欧洲语言,如法语等等 请问JAVA如何insert文件入Access数据库. IBatis的问题,高手请进 IBM的最新面试题,有空都来看看。 利用jtree动态创建jtable的问题 关于在图形上写文字的问题,急!在线等待 byte/char/short在运算过程中遇到的问题 高手,一个好象CSDN还没人能解决的问题!如何获得java对象在内存中的大小???100分相谢! 给些建议:如何继承swingset2中好看的界面 救命:四面碰壁,头破血流,都是UnsatisfiedLinkError
你的那个问题我已经给分
可是这个问题,我觉得还是有问题
比如
int a[] = new int[90]
然后我要给它全部赋成-2
那用你给的函数(我以前试过),我是不是要先作一个90个-2的数组,再实现给a赋值的目的呢?能不能说的详细一些,多谢.
char *p = new char[90];
memset((void *)p, -2, 90);
没问题,可以把90个char都赋成-2,因为C++里的char是一个byte(8bit);在看看下面的c++程序:
int *p = new int[90];
memset((void *)p, -2, 90);
这就有问题了,它不能把数组里的每个int数据都赋成-2,实际上这样做的结果是:前22个int数据都是:0xFEFEFEFE,第23个是0xFEFEXXXX(X表示未知);剩下的int全都是未知;为什么会这样,因为每个int是4个byte,90个int就是360个byte,memset()只对前90个byte赋值。而-2用16进制表示正好是0xFE。由此可见,memset()只能对连续的byte赋值,如果需要赋值的数组不是char类型的,那么就不会得到预期的结果。所以要对int数组赋初值,用memset是不行的,除非赋值成0。唯一的办法还是用循环,一个一个来赋值。同样的道理对于long型数组,short型数组,memset也不能正确的赋初值。
再来看看你的标题里的问题,可以明确的告诉你,java里没有类似c里的memset函数。原因很简单,memset可以直接操作内存,而java不能直接操作内存。
java里的数组数据是不是在内存中连续分配的,这个我也不清楚,可能与JVM的实现有关,不同的JVM可能有不同的实现。所以java语言没有提供象memset这样的函数。但是,java里对于数组的处理有一个专门的工具类:java.util.Arrays
这个类提供了5个功能:
1,将数组转换成java.util.ArrayList类型;【asList()】
2,数组的排序;【sort()】
3,数组的二分查找;【binarySearch()】
4,两个数组的比较;【equals()】
5,给数组赋初值;【fill()】第5个功能正是你需要的,实际上这个方法是对数组里的每个数进行循环赋值,如果有兴趣,可以看看它的源码。