标准C学习day07 可变长数组 多维数组

本文深入解析了二维数组的存储区分组原理及初始化方法,探讨了如何通过双重循环处理数组元素,并介绍了函数调用机制,包括时间分配规则、数据传递方式以及返回值的设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组还可以把存储区进行分组

   第一组           第二组

| **** **** **** | **** **** **** |

一维数组不可以表示存储区的分组情况
多维数组才可以表示存储区的分组情况

二维数组是最常见的多维数组,它只能
表示一次分组情况
为了表示二维数组里的存储区需要提供
两个下标
可以采用双重循环依次处理二维数组里的
每个存储区

二维数组也应该进行初始化
二维数组可以象一维数组一样进行初始化
可以对初始化数据进行分组
如果可以根据初始化数据个数计算出分组
个数就可以省略二维数组声明里的
分组个数

二维数组名称可以代表数组里第一个存储区
的地址

int arr[3][2];

| **** **** | **** **** | **** **** |
^
*
*
*
arr

二维数组名称不可以被赋值

可以对二维数组名称进行sizeof计算,
结果是二维数组里所有存储区的总大小

二维数组名称后也可以只使用一个下标,
这个下标是组下标

int arr[3][2]
组下标为0 组下标为1 组下标为2
| **** **** | **** **** | **** **** |
^
*
*
arr[1]
arr[num]表示组下标为num那一组里第一个
存储区的地址
二维数组里每组存储区可以看做是一个一维
数组,二维数组名称后加组下标可以作为
这个一维数组的名称使用

int arr[3][2]

组下标是0  组下标是1   组下标是2

| **** **** | **** **** | **** **** |
---------
arr[1]

可以采用分组的方式管理程序里的语句
每个语句分组叫做一个函数

多函数程序执行时的时间分配必须遵守
以下规则
1.整个程序的执行时间被分成几段,每段
由一个函数使用
2.不同时间段不能互相重叠并且所有时间段
必须连续
3.如果函数A把时间分配给函数B使用则
函数B结束后必须把时间再还给函数A

如果函数A把时间分配给函数B使用则它们
之间存在函数调用关系
函数A叫做调用函数,函数B叫做被调用函数
函数调用关系只在被调用函数工作期间有效

函数调用语句可以产生函数调用关系

变量只能在函数里使用,其他函数不可以使用
不同函数里的变量可以重名
如果函数多次执行,每次执行的时候变量
代表的存储区都不同
声明变量的时候可以使用volatile关键字,
这种变量的内容可以被其它程序修改

函数调用过程中通常伴随着两个函数之间
的数据传递
数据传递存在两个完全相反的方向
一个方向是从调用函数向被调用函数
另一个方向是从被调用函数向调用函数
不论那个方向的数据传递都需要把数据
记录在被调用函数的存储区里

只能从被调用函数向调用函数传递一个
数据
这个数据叫做被调用函数的返回值
被调用函数只能在最后一步才能传递
返回值
被调用函数需要提供一个专门的存储区
用来存放返回值
编写被调用函数的时候需要把这个存储区
的类型名称写在函数名称前
在被调用函数里使用return关键字向
这个存储区里放返回值
调用函数里直接把函数调用语句作为数字
使用就可以得到返回值

如果没有使用retuan关键字设置返回值
这个时候返回值是一个随机数
调用函数得到返回值以后或者立刻使用,
或者存放在别的存储区里
如果函数没有返回值在编写的时候就应该
在函数名称前写void
如果函数名称前什么都没写在C89规范里
表示函数有一个整数类型的返回值,
在C99规范里不允许这样

函数不可以用数组存放返回值

可以从调用函数向被调用函数传递多个
数据,这些数据的类型可以不同
被调用函数需要为每个传递过来的数据
提供一个专用的存储区
代表这些存储区的变量应该声明在函数
名称后面的小括号里
这些变量叫做形式参数
小括号里的所有内容叫做形式参数列表
每个形式参数的类型名称都不可以省略
被调用函数里就可以把形式参数当做
变量使用

调用带参数的函数时需要为每个参数提供
一个对应的数字
这些数字叫做实际参数
只要能作为数字使用的内容都可以作为实际
参数使用
如果函数没有形式参数就应该在小括号里
写void
如果小括号里什么都不写表示函数有任意
多个不确定类型的形式参数

被调用函数


  •               *
    
  •               *
    
  • 形式参数 *
  • val val1 *

  • 3 8 11 *


^ ^ *


    • V    调用函数
      

  •               *
    
  • 3 8 *
  • 实际参数 *
  •               *
    
  •               *
    
  •               *
    
  •               *
    

<think>嗯,用户想了解如何在Java中创建一个String数组。好的,首先得回忆一下Java数组的基本概念。数组是用来存储固定大小的同类型元素的,而String数组自然就是存储字符串的数组。 那创建String数组的步骤应该分哪几种情况呢?可能有声明、初始化分开的情况,还有声明的同时直接初始化的情况。对了,还有动态初始化,就是先声明数组的大小,然后再逐个赋值。 首先,声明数组的时候,语法应该是String[] arrayName;或者String arrayName[];,不过前者更符合Java的规范,推荐使用第一种方式。比如String[] names;。 接下来是初始化。如果声明的时候直接初始化,可以用大括号括起来的值列表,比如String[] fruits = {"苹果", "香蕉", "橙子"};。这种情况下,数组的长度会自动确定,不需要指定大小。 另一种情况是动态初始化,先指定数组的长度,之后再给每个元素赋值。这时候需要用new关键字,比如String[] cities = new String[3];,然后通过索引赋值,cities[0] = "北京"; cities[1] = "上海"; cities[2] = "广州";。这里需要注意的是,数组的索引是从0开始的,而且如果未赋值的元素会默认是null,因为String是引用类型。 还有一种情况是声明和初始化分开的情况,比如先声明String[] colors;,然后在后面需要的时候再初始化,colors = new String[]{"红色", "绿色", "蓝色"};。这种情况下,不能在分开初始化的时候省略new String[],否则编译器会报错。 可能用户会混淆数组的初始化和普通变量的初始化,需要强调使用new关键字的情况。另外,Java中的数组长度一旦确定就不能更改,所以动态初始化时需要预先知道需要的长度。 还有可能要注意的是,多维数组的情况,不过用户的问题可能只是单维的String数组,所以暂时不需要深入多维。但如果有提到的话,可以简单说明。 最后,示例代码对于理解很重要,应该给出几种不同的例子,比如直接初始化、动态初始化、分开声明和初始化,以及循环遍历数组。这样用户可以看到不同方法的实际应用。 检查一下有没有遗漏的情况,比如匿名数组或者使用Arrays工具类的情况,但可能对于基础问题来说,这些内容可能稍高级,用户可能只需要基础创建方法。 总结一下,步骤应该是:声明数组、初始化数组(分静态和动态),然后使用数组。需要提醒用户注意数组索引越界的问题,以及数组长度不可变的特性。</think>在Java中创建String数组的步骤如下,分为声明、初始化和使用三个部分: 一、声明数组(两种方式) $$String[] array1; \quad // 推荐写法$$ $$String array2[]; \quad // 兼容C语言风格$$ 二、初始化数组(三种常用方式) 1. 直接初始化(声明时赋值) $$String[] fruits = {"苹果", "香蕉", "橙子"};$$ 2. 动态初始化(指定长度) $$String[] cities = new String[3];$$ 通过索引逐个赋值: $$cities[0] = "北京";$$ $$cities[1] = "上海";$$ $$cities[2] = "广州";$$ 3. 分开声明与初始化 $$String[] colors;$$ $$colors = new String[]{"红色", "绿色", "蓝色"};$$ 三、使用数组示例 ```java public class Main { public static void main(String[] args) { // 直接初始化 String[] languages = {"Java", "Python", "C++"}; // 动态初始化 String[] weekdays = new String[7]; weekdays[0] = "周一"; weekdays[1] = "周二"; // ...其他元素赋值 // 遍历数组 for (String day : weekdays) { System.out.println(day); } } } ``` 注意事项: 1. 数组索引从0开始,最大索引为`长度-1` 2. 未赋值的元素默认值为`null` 3. 数组长度固定,可通过`.length`获取 4. 推荐使用增强for循环遍历数组 根据具体需求选择初始化方式:已知具体元素值时用直接初始化,需动态确定元素时用动态初始化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值