数组定义和初始化

在C中,数组是一种重要的数据结构,它是一组相同类型的元素的集合,通过下标来访问每个元素。数组可以用于表示一组有序的数据,比如一组数字、一组单词等。

在类中,声明和定义数组与普通变量的过程类似,只不过在类中使用时需要注意一些细节。在类中声明数组需要使用数组名和具体的维度,例如:

int arr[10];

这里声明了一个长度为10的整数数组,其下标从0到9。默认情况下,数组元素的值将不确定,这时我们需要为数组指定初始值。可以使用for循环来为数组元素赋值:

for (int i = 0; i < 10; i++) {
arr[i] = i;
}

这里的for循环将数组的下标从0到9遍历一遍,将每个元素的值设置为它的下标值。这样,数组就被初始化了。

从键盘读入数组元素

有时候,我们需要从用户手动输入数据来给数组元素赋值。为了实现这个目的,可以使用scanf函数逐个输入数组元素的值,如下所示:

for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}

这里的%d表示输入一个整数,&arr[i]表示获取arr[i]的内存地址,将输入的数据存放在这个地址中。

需要注意的是,在使用scanf函数时需要确保输入的数据类型要与数组类型相同,否则可能导致错误。可以使用if语句来检查输入的数据是否符合要求:

for (int i = 0; i < 10; i++) {
if (scanf("%d", &arr[i]) != 1) {
printf("输入数据有误!");
}
}

这里的if语句判断scanf函数返回的结果是否为1,如果不是则输出错误信息。

数组作为参数传递

当我们需要在类中的某个函数中使用数组时,通常会将数组作为参数传递。数组作为参数传递有两种方式:按值传递和按引用传递。

按值传递的方式是将数组作为参数复制到函数中。这样做的缺点是会占用大量的内存空间,影响程序的执行效率。例如:

void func(int arr[], int length) {
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
}

这里的arr是指向数组首元素的指针,length是数组的长度。在调用这个函数时,数组会被复制一份传递到函数中,占用大量的内存。

按引用传递的方式是将数组的地址作为参数传递到函数中。这样做的好处是可以避免大量的内存拷贝,提高程序的执行效率。例如:

void func(int * arr, int length) {
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
}

这里的arr是一个指向int型变量的指针,也就是数组的地址。在调用这个函数时,只需要传递数组的地址即可,不会占用大量的内存空间。