Java数组初始化,这三种方式有什么区别
创建数组的三种方式:其实分为2类,一种是静态的创建,如方式一。一种是动态的创建,只不过根据写法的不同分为方式二和方式三:
[java] view plain copy
public static void main(String[] args) {
// 1.方式一 声明 分配空间并赋值
int[] arr1 = {1,2,3};
// 2.方式二 显示初始化
int[] arr2;
arr2 = new int[]{1,2,3};
// 3.方式三 显示初始化()
int[] arr3;
arr3 = new int[3];
}
他们的区别,方式一:在声明的时候直接就已经分配空间,并赋值,方式一是不能写成如下这种形式的。
[java] view plain copy
int[] arr1;
arr1 = {1,2,3};//错误写法 编译不同过
方式二和方式三,声明和内存分配是分开的,如上面的例子,
[java] view plain copy
int[] arr2; 和 int[] arr3;
这一步是在栈空间分配一个引用,存放的是一个引用,null
[java] view plain copy
arr2 = new int[]{1,2,3};arr3 = new int[3];
到这一步的时候jvm才开始在内存堆区域分配空间,并赋值,方式二直接赋值 1,2,3 方式三 默认初始化,基本类型是 0 布尔类型是 false 引用类型为null,
注:内存一旦分配不能改变,所有说数组长度固定
c语言数组的初始化有哪几种
我来一一解答,希望解答的合适请多加点分,谢谢
1,C语言有的数据类型都可以作为数组的类型,不光是int,char
float
double
long
指针
结构等等都可以是数组的类型。
2,这样理解是正确的,数组中的每一个元素和这个数组类型一样的变量类型相同,取值范围相同,只是引用方式不一样。
3,是的,数组的性质都是一样的,不光是char,所有类型都符合这一规律
4,那么char型变量和数组用什么值给其初始化比较安全?这种提问没有见过,只能说不初始化会使数组指向其他内存单元,导致不确定的值。最好是在数组初始化的时候赋给你需要用的值
还有什么问题可以Hi我
关于数组初始化
对数组赋值的原因:定义一个数组时,数组获取内存中的一块区域,这个区域可能以前被用,内存中的值是不确定的,所以数组的值也是不确定的。
对数组赋值的目的:让数组的值是我们需要的确定的值。
问题一:没有必要对数组初始化,因为gets已经初始化过了。只要值是我们想要的就行。
问题二:编译器要求的
char a[10]= "i love you"; // 正确
char a[10];
a[10]="i love you"; // 错误,编译器规定的
strcpy(a,"i love you"); // 正确,一个字符一个字符赋值的。
char *a;
a="i love you"; // 正确,但是不能改变"i love you"的值
// 字符串是常量,放在常量区域,只能读,不能修改,a是指向常量区域的首地址

