在C中声明数组需要指明数组类型与元素数量
int a[10];
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 可逐个初始化数组元素,大括号内元素个数不可超过声明的元素数量
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 也可省略数组大小,此时数组大小即为大括号内元素个数
a[1] = 3; // 可直接为某元素赋值
变量a的值则为数组的初始内存地址,即a[0]的地址
在C中可用for循环对每个数组元素做相同操作
for ( i = 0; i < 10; i++ ) {
a[ i ] = i + 100; /* 设置元素 i 为 i + 100 */
}
int i;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int *b = a;
b[1] = 11;
for (i = 0; i < 10; i++) {
printf("%d ",a[i]); // 输出为1 11 3 4 5 6 7 8 9
}
上述代码将a数组的内存地址赋给了b,故改变b中元素后,a中元素也随之改变。
复制数组时,最好使用memcpy函数
memcpy(b,a,sizeof(int)*k);
k为复制到b数组中的元素个数
#include
using namespace std;
int main()
{
int myarray[3] = {10,20,30};
for (int i=0; i<3; ++i)
++myarray[i];
for (int elem : myarray)
cout << elem << '\n'; // 此用法也可遍历数组,类似Java的foreach循环
}
其它使用方法与C数组一致
int[] myList = new int[10];
上面的语句声明了整型数组变量myList,创建了一个由整型元素构成的数组,并将改数组的引用赋值给myList。
for(int e: myList) {
System.out.println(e);
}
若使用arr1=arr2
,则为内存地址的复制,改变其中一个,另一个同样改变。
int c[]= new int[]{1,2,3,4,5};
int[] d=new int[5];
System.arraycopy(c, 0, d, 0, 5); //实现数组之间的复制,从c[0]开始复制,从d[0]复制给d5个元素
for(int n=0;n<d.length;n++)
{
System.out.println(d[n]);
}
import java.util.Arrays;
public class javaTest {
public static void main(String[] args) {
int[] a= {1,2,3,4,5};
int[] b=new int[5];
b=Arrays.copyOf(a, 5); // 将从头开始复制5个数组a的元素
System.out.println(Arrays.toString(b));
}
}
import java.util.Arrays;
public class javaTest {
public static void main(String[] args) {
int[] a= {1,2,3,4,5,6,7,8};
int[] b=new int[5];
b=Arrays.copyOf(a, 2,6); // 将从下标2开始复制5个数组a的元素
System.out.println(Arrays.toString(b));
}
}
python没有对数组的内置支持,但是可以用列表替代
lst = ['a',1,'b'] // 这样的写法是完全可以的
for i in lst:
print(i)
python同样不能将一个列表的值直接赋给另一个,但是python的复制方式多种多样,比如:
切片
list_2 = list_1[:]
list方法
list_2 = list(list_1)
*1
list_2 = list_1 * 1
使用copy模块
import copy
list_2 = copy.copy(list_1) // 这种拷贝只能将外层的值拷贝到list_2,若为多层列表,内层依然指向同一个内存地址
list_2 = copy.deepcopy(list_1) // 可拷贝多层
var myCars=new Array("Saab","Volvo","BMW");
var myCars=["Saab","Volvo","BMW"];
JS数组中可包含不同类型,如对象元素、函数、数组
myArray[0]=Date.now;
myArray[1]=myFunction;
myArray[2]=myCars;
var arr = [1,2,3,4,5,6];
arr.forEach(function(value){
console.log(value);
});
注:在forEach中无法使用break
var arr1 = [11,22,33,44,55,66];
for (var n in arr1){
console.log(arr1[n]);
};
注:和python不一样的是,此时的n代表的是数组下标
var arr2 = [11,22,33,44,55,66];
for (var n of arr2){
if (n > 3){
break;
}
console.log(arr2[n]);
}
在js中同样不能直接将一个数组的值赋给另外一个,除了for循环外,深复制数组还有以下方法:
var arr1 = [1, 2, 3];
var arr2 = arr1.concat();
var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0); // 从第一个元素开始,直到最后
var arr1 = [1, 2, 3];
var [...arr2] = arr1;
菜鸟教程: https://www.runoob.com/cprogramming/c-arrays.html https://www.runoob.com/js/js-obj-array.html
cplusplus: http://www.cplusplus.com/doc/tutorial/arrays/
csdn: https://blog.csdn.net/qq_39360985/article/details/79593418 https://blog.csdn.net/just16cz/article/details/80385101
https://blog.csdn.net/gosline/article/details/93223202
https://blog.csdn.net/sun_DongLiang/article/details/84400453
w3schools: https://www.w3schools.com/python/python_arrays.asp
cnblogs: https://www.cnblogs.com/Hyacinth-zqz/p/8428874.html