前言:“静态初始化”“动态初始化”概念在c和java里不一样。
Java中这两个就是你用不用花括号一个一个赋值的区别。选择花括号手动赋值就是静态。而选择只给长度就是动态(“动”就动在系统会给赋初值 0或0.0或null)。二者不能并存。
C中数组没手动赋值就不给你默认初始值,所以必须有花括号手动赋值。并且长度想写就写!
int a[]={1,2,3}; 系统自动判断长度为3
int a[3]={1,2,3}; 标准
int a[3]={1,2}; 元素a[3]被赋默认初始值0(不进行花括号没有默认初始值,java只要new了之 后都会赋初值)
int a[3]; 没默认初值,元素就随机值了。如下所示。
所以C语言里面的没有明确“动态/静态初始化”一说,不过倒有利用指针和malloc()函数制造动态数组的这么一回事(Java利用ArrayList实现)。
现在来看Java怎么初始化吧
第一条语句是数组的 声明,它和声明一个相应类型的原始数据类型变量 十分相似,只有类型名之后的方括号说明我们声明 的是一个数组。第二条语句中的关键字new使Java 创建了这个数组。我们需要在运行时明确地创建数 组的原因是Java编译器在编译时无法知道应该为数组预留多少空间(对于原始类型则可以)
看完java来看c
直接分配空间,不用new。
内存管理方式不同,C语言中数组在内存中连续存放,数组变量名就是数组的首地址。而Java中数组名不在数组中,仅仅作为管理者,也并没有分配所需要的内存空间。得new才行。
即数组名意义不同:Java中要区分数组的声明与定义仅仅定义了一个数组的名字,并没有给该数组分配所需要的存储空间。指针vs管理者http://t.csdn.cn/ewox2
初始化不同: c没有默认初值,必须手动初始化,哪怕是不完全初始化(即大括号里面的值不够元素一一对应上,后面的才会默认初始化)
赋值不一样
偶然看到别人发现c数组特性 很吊诡,越想越晕。
个人记忆:a[10]这样单独拿出来肯定就变成元素了
因为java限定长度之后就不能在花括号赋值了。即动态和静态初始化不能并存。而c数组的指定长度和花括号赋值可以同时进行(甚至缺一些都可以)
但java下面又扳回一城
但是 少了new又不行(如果写一行是可以少“new int []”)
Java的动态和静态初始化不能共存,但是各自可以把数组名“断头”另起一行进行初始化。C可以共存,但也就不能够断头了,不然 int a[10]; a[10]={xxx} a[10]就是一个具体的元素了。
断头
数组引用不同:http://t.csdn.cn/kXYkf数组的相互赋值相当于将它的元素的管理权限赋予给了另外一个数组。如下所示“起别名”
补充一下数组逆序的方法
疑惑点就在i<N/2对于奇数个和偶数个元素交换通用吗?那小于号又是什么原因呢?
我由下图来解释一下 看情况出一期b站讲解一下