数组
一维数组
数组就是包含多个数据的数据结构,而且数组内的每个元素的数据类型一致
数组的定义,例如
int a[10]
//这个就是定义了一个含有十个元素的数组,这十个元素的类型都是int类型
//定义数组的时候要把类型和长度都定义了
//因为我们后期数组的长度可能随时改变,我们可以用一个宏定义来解决这个改变的问题
#define N 10
int a[N];
一维数组的下标
值得注意的是,数组的下标都是从0开始的,就是说原先有N个元素,那么下标最多只能到N-1;
#define N 10
int a[N];
//数组a的下标范围就是0-9;
数组和循环的使用
数组和循环就像是好朋友,他们在一起真的是很合适;
不管是一维数组还是二维数组,甚至是多维数组,利用循环,我们可以对数组的元素进行操作
int i=0;
int sum=0;
for(i=0;i<N;i++)
{
a[i]=0;//这个是对数组里面的内容进行清空,都赋值为0//
}
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);//这个循环可以做到对数组里面的内容输入值//
}
for(i=0;i<N;i++)
{
sum+=a[i];//这个是对数组里面的元素进行相加//
}
//如果是二维数组,那么就要定义两个元素来控制数组
int i,j;
int b[N][N]
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
b[i][j]=0;//这个是对数组里面的内容都赋值为0//
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&b[i][j]);//这个是给数组里面的元素输入值
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d\t",b[i][j]);//这个就是输出数组的内容//
}
printf("\n");
}
//高维数组以此类推
值得注意的是,scanf函数的时候a[i]作为一个变量,前面依然要加上&符号
数组的下标
数组的下标可以是任何整数表达式
int a[10];
int i=1,j=3;
a[i+j*10];
a[i++];
a[j++];
//都是合法的,我甚至可以像下面这样
a[i,j];//这个含义就是一个括号的运算,这个式子表达的意思就是a[j];
//虽然上面的都是合法的,但是我们尽量少用,因为有时候会带来副作用//
数组的初始化
数组的初始化有很多表达方式
1,int a[5]={1,2,3,4,5};
2,int a[5]={1,2} 有完全赋值和不完全赋值,没有赋值到的元素就是默认为0
我们还可以不给出数组的长度,就是
int a[]={1,2,3,4,5}
那么显而易见,这个数组就是a[5];
对数组使用sizeof
一个数组使用sizeof,结果就是数组的长度*类型所占的字节数
int a[10];//有的计算机里面int是2字节,有的是4字节,所以这个可能是20,也可能是40
char a[100];//这个结果是100
double a[10];//结果是80
float a[30];//结果是120