五种编程语言数组的对比(C C++ Java Javascript Python)

数组

  • 数组是用于储存多个相同类型数据的集合。
  • 数组中的特定元素可以通过索引访问。
  • 所有的数组都是由连续的内存位置组成。
  • 最低的地址对应第一个元素,最高的地址对应最后一个元素。
    在这里插入图片描述

C数组

声明

在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]的地址

for

在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数组中的元素个数

C++数组

for

#include <iostream>

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数组一致

Java数组

声明

int[] myList = new int[10]; 

上面的语句声明了整型数组变量myList,创建了一个由整型元素构成的数组,并将改数组的引用赋值给myList。

foreach循环

for(int e: myList) {
	System.out.println(e);
}

拷贝

若使用arr1=arr2,则为内存地址的复制,改变其中一个,另一个同样改变。

  • arraycopy
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]);
}  
  • copyOf
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));
	}
}
  • copyOfRange
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数组

python没有对数组的内置支持,但是可以用列表替代

  • 列表中的元素可以不是一个类型
lst = ['a',1,'b'] // 这样的写法是完全可以的

for

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) // 可拷贝多层

JS数组

声明

var myCars=new Array("Saab","Volvo","BMW");
var myCars=["Saab","Volvo","BMW"];

JS数组中可包含不同类型,如对象元素、函数、数组

myArray[0]=Date.now; 
myArray[1]=myFunction;
myArray[2]=myCars;

forEach

var arr = [1,2,3,4,5,6];
arr.forEach(function(value){
    console.log(value);
});

注:在forEach中无法使用break

for in

var arr1 = [11,22,33,44,55,66];
for (var n in arr1){
    console.log(arr1[n]);
}

注:和python不一样的是,此时的n代表的是数组下标

for of

var arr2 = [11,22,33,44,55,66];
for (var n of arr2){
    if (n > 3){
        break;
    }
    console.log(arr2[n]);
}

拷贝

在js中同样不能直接将一个数组的值赋给另外一个,除了for循环外,深复制数组还有以下方法:

  • concat
var arr1 = [1, 2, 3];
var arr2 = arr1.concat();
  • slice
var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0); // 从第一个元素开始,直到最后
  • ES6扩展运算符
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值