1198 字
6 分钟
Loading
数组(以一维数组为例)
2023-10-13

数组:

例如:

Int a[100];

就像字符串的写法 char a[100];一样,数组也是按照这样。

Int规定数组的类型,a是变量的名称,[100]则代表了这个数组里有100个变量。也就是:

<类型>变量名称[元素数量]

而且这里的元素数量必须是整数。数组在创建之后,就不能改变大小了。

在内存中,数组的单元是依次排列的,如果是int形的数组就可以用指针运算的形式获得后面一位的元素。

数组中括号里的数字也可以用变量代替,比如:

Int a;

Int b[100];

Int c=0;

Double sum;

While(x!=-1){

b[c]=a;

sum+=a;

c++;

scanf(“%d”,a);

}

Printf(“%d”,sum/c);

这是一个输入100个以内的数字求出平均数,并输入-1时终止输入的程序。

这是最开始我们写的n个数的平均函数:

#include<stdio.h>

int main()

{

int a,b,c;

scanf(“%d”,&a);

double sum=0;

b=a;

c=1;

while (c!=n){

scanf(“%d”,&a);

sum+=a;

}

printf(“%d”,sum/a);

return 0;

}

这两个程序的不同在于,用数组的程序记录下了每一个输入的变量,而第二个程序则在每次的计算中就抹除了输入的变量,第一个程序在运行结束之后仍旧可以查看每一次输入的数字,而第二个程序到最后的结果只能求出的平均数。

数组也是可以直接输出的,比如像这样:

Printf(“%d”,number[i]);

这样就会输出符合条件的所有number。

此外,数组运算也可以出现在赋值运算里,象是这样:

A[1]=a[2]+3;

这个表达式的意思是:读出a[2]的值,并与3相加,作为a[1]的值。

在使用数组时,[]内的数字就是下标,也叫索引。象是这样:

Int a[100];

Scanf(“%d”,&a[2]);

就表示要写入a[2]中去。

数组计数是从0开始计数,例如 int a[100] 实际上这个数组里有100个元素。Int a[0]是第一个元素,a[99]是最后一个元素。

编译器不会检查数组下表是否越界,无论是对数组单元读还是写。不同的编译器或是运行环境对数组的检查不一样,所以很可能发生这种错误:

在他的编译器上能运行,在你的编译器运行不了,上一次能打开,这一次就打不开了。

这种问题就有可能出现在 因为数组使用时越界。

尤其时和这个问题结合时很容易出错!例如:

Int a[10];

a[10]=1;

printf(“%d”,a[10]);

这里的a[10]实际上就超出了数组的范围,但是不会报错,而是会照着错误的情景运行下去,所以一定要养成检查数组的习惯。

为了获取固定的数组范围,我们可以使用这样的代码:

Int count;

Scanf(“%d”,&count);

Int a[count];

让用户先输入数字的范围,再根据输入的数字来创建数组的大小。

当然,你也可以写出一个长度为0的数组,像是这样:

Int a[0];

但是,这个数组是无用的。

数组也需要初始化,通常我们用循环的方式来让数组进行初始化,比如这样:

Int a[10];

Int i;

For(i=0;i<10;i++)

{

Count[i]=0;

}

这样操作之后,数组的每一项的值都会变为0,也就完成了初始化。

(如果用集成初始化的方式,可以变得更简单)

Int a[10]{0};

这样使用了集成初始化之后,a里的每一个元素的值都是0了!

如果想要知道一个数组里有多少个元素也很简单,需要用到sizeof函数(显示占据多少个字节数),像是这样:

Sizeof(a)/sizeof(a[1]);

这个代码所表达的意思是:用这个数组所占据的总字节数除以一个元素占据的字节数,就可以求出来一共有多少个元素了——因为同类型的变量所占据的字节数是一样大的。

数组变量是不能赋值的,比如这样是不可以的:

Int a[10]={1,2,3,4,5,6,7,8,9,10,}

Int b[10]=a;

这样是不行的。想要赋值必须使用遍历数组的方式,比如这样:

For(i=0;i<length;i++){

b[i]=a[i];

}

通过循环的方式来让数组b的每一项都等于数组a的每一项。

在调用函数的时候,不能给出数组的大小,即a[]的中括号里不能有数字。这意味着你不能使用sizeof函数来计算元素的个数,必须传入另一个参数来充当数组的大小。比如这样:

必须使用length来传入数组的大小。

如果直接输出数组的地址,像是这是这样:

Int a[10];

Printf(“%p”,a);

得到的值和a[0]的地址是一样的。

实际上,数组的地址就是起始项的地址,占据的字节就是多少项4,所以取得起始项的地址加上4x项就是最后一项的地址。

数组(以一维数组为例)
https://vilstia.pages.dev/posts/学习笔记/c/数组以一维数组为例/
作者
琴泠
发布于
2023-10-13
许可协议
CC BY-NC-SA 4.0