数组知识大总结

一维数组的创建和初始化

数组的创建

数组是一组相同类型元素的集合

tyoe_ty arr_name [const_n]

数组元素类型 常量表达式,指定数组大小

注意:

C99中引入了变长数组(长度可变)的概念,允许数组大小用变量来制定,如果编译器不支持C99的变长数组那就不能使用

VS2019不支持变长数组

数组的初始化

创建的同时并赋值

int main()
{
    int arr1[10] = {1,2,3,4};//不完全初始化//10
    int arr2[] = {1,2,3,4};//4
    //char ch1[] = {'a','b'};
    //char ch2[] = {'a',98};
    return 0;
}

注意:变长数组是不能初始化的

在静态区创建的变量默认初始化值为0(全局变量,静态变量)

在栈区创建的变量若不初始化是随机值(局部变量,形式参数)

一维数组的使用

[ ]下标引用操作符,下标从0开始

arr[4] arr,4是[ ]的两个操作数

int main()
{   
    //计算数组元素个数的写法
    int sz =sizeof(arr)/sizeof(arr[0]);
    int arr[100] = {1,2,3,4,5,6};//创建数组时不能使用变量
    //写代码赋值1~100
    int i = 0
    //赋值
    for (i= 0; i < ; i++)
    {
        a[i] = i + 1;
    }
    //打印
    for (i = 0; i < sz; i++)
    {
        printf("%d",arr[i]);//可以使用变量
    }
}

一维数组在内存中的存储

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    //打印数组的每个元素地址
    int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    for (i=0;i<sz;i++)
    {
        printf("&arr[%d]=%p\n",i,&arr[i]);
    }
    return 0;
}

一维数组在内存中是连续存放的(差4字节)→可以用下标和指针访问

随着数组下标的增长,地址是由低到高变化的

数组名是数组首元素的地址

两个例外:

  1. sizeof(数组名),数组名表示整个数组,计算整个数组的大小
  2. &数组名,数组名表示整个数组,取出的是整个数组的地址

%p--打印地址

char* p:跳过一个字符

二维数组的创建和初始化

二维数组的创建

int main()
{
	int arr[3][5];
	     //三行五列

	return 0;
}

二维数组的初始化

可以省略行,但不能省略列

 //int arr[3][5] = { 1,2,3,4,5,6 };//不完全初始化
    // int arr[][5] = { 1,2,3,4,5,6 };
	     
	int arr[][5] = {{1,2},{3,4},{5,6}};

二维数组的访问

int main()
{
           
	//int arr[3][5] = { 1,2,3,4,5,6 };//不完全初始化
    // int arr[][5] = { 1,2,3,4,5,6 };
	     
	int arr[][5] = {{1,2},{3,4},{5,6}};
 int i = 0;
 for (i=0;i<3;i+=)
 //i<sizeof(arr)/sizeof(arr[0])
 {
     int j=0;
     for (j=0;j<5;j++)
     //j<sizeof(arr[0])/sizeof(arr[0][0])
     {
         printf("%d ",arr[i][j]);//下标访问操作符
     }
     printf("\n");
 }
	return 0;
}

二维数组的内存存储

int main()
{     	     
	int arr[3][5] = {{1,2},{3,4},{5,6}};
    int i = 0;
    for (i=0;i<3;i+=)
 {
     int j=0;
     for (j=0;j<5;j++)
     {
         printf("&arr[i][j] = %p\n ",i,j,&arr[i][j]);
     }
 }
	return 0;
}

二维数组在内存中也是连续存放的

数组越界

下标必须在0~n-1当中不要超越数组访问

程序员需要自行检查(编译器一般不报错)

二维一维都存在越界问题

数组作为函数参数

冒泡排序函数

数组中两个相邻元素进行比较,如果不满足顺序就交换

n个元素进行n-1趟冒泡排序

void bubble_sort(int arr[],int sz)//指针
// void bubble_sort(int* arr,int sz)

{
    //趟数
    
    int i = 0;
    for (i = 0; i < sz-1; i++)
    {
        int flag = 0;
        //每一趟冒泡过程
        int j = 0;
        for (j = 0; j <sz-1-i ; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                flag=0;
                //交换
                int tmp = arr[j];
                arr[j] = arr[j +1];
                arr[j + 1] = tmp;
            }
        }
    }
}


int main()
{
    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
    //冒泡排序函数
    //arr表示首元素地址
    int sz = sizeof(arr) / sizeof(arr[0]);

    bubble_sort(arr,sz);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

<think>好的,用户需要查找Java数组相关的知识点总结。首先,我得整理用户提供的引用内容,看看有哪些关键点需要覆盖。根据引用中的信息,数组的定义、声明创建、内存分析、初始化、遍历以及常用方法都是重点。 用户提到的引用[1]到[5]涵盖了数组的基础概念、声明方式、内存分配、静态和动态初始化以及比较方法。我需要将这些内容系统地组织起来,确保结构清晰。例如,先概括数组的基本概念,再分点讲解声明和创建、内存分析、初始化和遍历,最后提到常用方法如Arrays工具类。 同时,用户提供的示例中提到了代码块的使用,我需要确保代码示例正确,并符合Java语法。比如,数组的静态和动态初始化示例,以及使用Arrays.toString和Arrays.equals的方法。还要注意引用标识的正确添加,比如在内存分析部分引用[3]和[4]。 另外,用户要求生成相关问题,我需要根据内容提出几个相关问题,可能涉及数组的特点、默认值、遍历方式、深浅拷贝以及工具类使用等。这些问题应该能够帮助用户进一步巩固知识点。 需要检查是否有遗漏的重要知识点,比如数组的默认值、多维数组或者数组的异常处理,但根据提供的引用内容,可能不需要深入这些方面。另外,确保回答中使用中文,并且数学表达式正确应用,但在这个问题中可能涉及较少数学内容,主要关注代码和文字描述。 最后,确保回答结构符合用户的要求,分点明确,引用正确,并且语言通顺自然。避免使用Markdown格式,用段落和代码块区分内容。确认所有引用来源都正确标注,没有错误信息。</think>### Java数组知识点总结 #### 一、数组的定义与特点 数组是**相同数据类型元素的有序集合**,通过下标访问元素,索引从$0$开始。数组在内存中占用连续空间,属于引用数据类型,存储于堆内存中[^3][^4]。 #### 二、数组的声明与创建 1. **声明方式** - 首选语法:`数据类型[] 数组名` - 兼容语法:`数据类型 数组名[]`(不推荐) ```java int[] arr1; // 推荐 String arr2[]; // 不推荐 ``` 2. **动态初始化** 创建数组时指定长度,元素初始值为默认值(如`int`类型为$0$,引用类型为`null`)[^5]。 ```java int[] arr = new int[3]; // 创建长度为3的整型数组 ``` 3. **静态初始化** 直接指定元素值,长度由系统推断[^5]。 ```java int[] arr = {1, 2, 3}; // 简化写法 String[] names = new String[]{"Alice", "Bob"}; // 完整写法 ``` #### 三、内存分析 Java数组的创建涉及以下内存分配过程: 1. 声明数组变量时,栈内存分配引用空间 2. `new`操作在堆内存中开辟连续存储空间 3. 数组变量指向堆内存地址[^3]。 例如: ```java int[] arr = new int[3]; // 栈中存引用arr,堆中分配3个int空间 ``` #### 四、数组的访问与遍历 1. **通过索引访问元素** ```java arr[0] = 10; // 修改第一个元素 System.out.println(arr[1]); // 输出第二个元素 ``` 2. **遍历方式** - for循环: ```java for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` - 增强for循环: ```java for (int num : arr) { System.out.println(num); } ``` #### 五、数组的常用方法 1. **数组长度** ```java int len = arr.length; // 注意是属性而非方法 ``` 2. **数组比较** 使用`Arrays.equals()`比较内容,而非`==`(比较引用地址)[^2]。 ```java int[] a = {1,2}, b = {1,2}; System.out.println(Arrays.equals(a, b)); // true ``` 3. **数组转字符串** ```java System.out.println(Arrays.toString(arr)); // 输出格式如"[1, 2, 3]" ``` #### 六、多维数组 以二维数组为例: ```java int[][] matrix = new int[2][3]; // 2行3列 int[][] arr = {{1,2}, {3,4}}; // 静态初始化 ``` ---
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hey pear!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值