数组是相同类型的若干数据的有序集合,系统会给数组分配一块连续的存储区域,按照元素类型分类可分为整型数组、实型数组、字符型数组、指针数组等,按照下标个数可分为一维数组、二维数组和多维数组。一、一维数组
1.一维数组的定义
类型说明符 数组名 [常量表达式];
- 常量表达式可以是整型常量,也可以是#define定义的符号常量;
- 数组元素下标范围为0~常量表达式-1;
- 数组名为数组的首地址值;
- 使用数组元素时,下标可以是常量,也可以是变量;
- 每一个数组元素都是一个变量。
2.一维数组的初始化
(1)先定义数组,再进行初始化
int myarray[5];
myarray[0]=1;
myarray[1]=2;
myarray[2]=3;
myarray[3]=4;
myarray[4]=5;
(2)在定义时直接初始化
int myarray[5]={1,2,3,4,5};
int myarray[5]={1,2,3}; 指定数组变量的长度时,未赋值的元素默认值为0
int myarray[ ]={1,2,3,4,5}; 可以不指定数组变量的长度,此时默认长度为5
3.一维数组的操作
(1)一维数组的输入输出
#include<stdio.h>
#define MAX 5
int main()
{
int myarray[MAX];
int i;
for(i=0;i<MAX;i++)
{
printf("输入一个整数:");
scanf("%d",&myarray[i]);
}
for(i=0;i<MAX;i++)
printf("myarray[%d]=%d\n",i,myarray[i]);
return 0;
}
(2)数组作为参数传递
- 使用数组名作为实参传递给函数
- 形参数组根据输入数组元素的值,确定数组元素的个数
- 数组按照传地址方式进行数据传递,所以实参可以改变形参,形参那也可以改变实参
#include<stdio.h>
#define MAX 5
void change(int[],int);
int main()
{
int myarray[MAX]={0};
int i,value=0;
printf("调用change函数前输出的结果:\n");
for(i=0;i<MAX;i++)
printf("myarray[%d]=%d\n",i,myarray[i]);
printf("value=%d\n",value);
change(myarray,value);
printf("调用change函数后输出的结果:\n");
for(i=0;i<MAX;i++)
printf("myarray[%d]=%d\n",i,myarray[i]);
printf("value=%d\n",value);
return 0;
}
void change(int myarray2[],int value2)
{
int i;
value2=1;
printf("change函数输出的结果:\n");
for(i=0;i<MAX;i++)
{
myarray2[i]=1;
printf("myarray2[%d]=%d\n",i,myarray2[i]);
}
printf("value2=%d\n",value2);
}

二、二维数组
1.二维数组的定义
类型说明符 数组名 [常量表达式1][常量表达式2];
- 常量表达式1为行下标, 常量表达式2为列下标;
- 按行分配内存地址。
例如对于数组array[2][3]:

2.二维数组的初始化
(1)先定义再初始化
int myarray[2][3];
myarray[0][0]=1;
myarray[1][2]=2;
(2)定义的同时初始化
int myarray[2][3]={1,2,3,4,5,6}; 按行给数组元素赋值
int myarray[2][3]={1,2,3,4}; 指定数组长度时,未赋值的元素默认为0,即myarray[1][1]=myarray[1][2]=0
int myarray[ ][3]={1,2,3,4,5,6}; 给所有元素赋值时,可以省略行下标,但不能省略列下标
int myarray[2][3]={{1,2,3},{4,5,6}}; 可以分行给数组元素赋值
int myarray[2][3]={{1,2,},{4}}; 分行赋值时,未赋值的元素默认为0
3.二维数组的操作
例:将一个二维数组的行和列互换
#include<stdio.h>
int main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int b[4][3],i,j;
printf("数组a:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%-4d",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
b[j][i]=a[i][j];
}
printf("数组b:\n");
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
printf("%-4d",b[j][i]);
}
printf("\n");
}
return 0;
}

三、字符数组
1.字符数组的定义
char 数组名 [常量表达式];
2.字符数组的初始化
(1)先定义数组,再进行初始化
char myarray[5];
myarray[0]='H';
myarray[1]='e';
myarray[2]='l';
myarray[3]='l';
myarray[4]='o';
(2)在定义时直接初始化
char myarray[11]={ 'H' , 'e' , 'l' , 'l' , 'o' , ' ' , 'W' , 'o' , 'r' , 'l' , 'd' }; 逐个给数组元素赋字符
char myarray[ ]={ 'H' , 'e' , 'l' , 'l' , 'o' , ' ' , 'W' , 'o' , 'r' , 'l' , 'd' }; 可省略数组变量长度
char myarray[11]={ "Hello World" }; 利用字符串给字符数组赋初值
char myarray[11]="Hello World" ; 利用字符串给字符数组赋初值时可省略大括号{ }
3.字符数组与字符串
编译器会在字符串末尾自动添加'\0'作为结束符,当用字符串给字符数组赋值时,'\0'也会存入数组。字符数组a的长度是12,b的长度是11,而数组a和数组c时等价的。
char a[ ]="Hello World";
char b[ ]={'H','e','l','l','o',' ','W','o','r','l','d'};
char c[ ]={'H','e','l','l','o',' ','W','o','r','l','d','\0'};
4.字符数组的输出
- 对于printf( )函数,可以采用格式符“%c”将字符数组中的字符逐个输出,也可以采用格式符“%s”将整个字符串输出
- 也可用puts( )函数输出字符串,括号内为数组名
- 逐个输出时,可以输出字符数组中的'\0';输出字符串时不能输出'\0'
- printf( )输出字符串时,遇到 '\0'就停止输出,且不会换行;puts( )输出字符串时,遇到 '\0'会停止输出并换行
#include<stdio.h>
int main()
{
char a[]="Hello World";
char b[]={'H','e','l','l','o','\0','W','o','r','l','d'};
char c[]={'H','e','l','l','o',' ','W','o','r','l','d','\0','\0'};
int i;
for(i=0;i<12;i++)
printf("%c",a[i]);
for(i=0;i<13;i++)
printf("%c",c[i]);
for(i=0;i<11;i++)
printf("%c",c[i]);
printf("\n");
printf("%s",a);
puts(a);
printf("%s",b);
puts(b);
puts(c);
return 0;
}

5.字符数组的输入
- scanf("%s",数组名),遇到空格或回车便停止接收数据,且不会接收空格
- gets(数组名),遇到回车停止接收数据,且可以接收空格
#include<stdio.h>
int main()
{
char a[12],b[12];
int i;
printf("输入数组a:\n");
scanf("%s",a);
printf("输入数组b:\n");
gets(b);
printf("输出数组a:\n");
puts(a);
printf("输出数组b:\n");
puts(b);
return 0;
}

C语言中的数组允许常量表达式或符号常量作为下标,元素范围从0到常量表达式-1。数组名代表首地址,元素可以是常量或变量。在函数调用中,数组按地址传递,允许形参和实参互相影响。二维数组按行分配内存,printf()和puts()函数用于字符串输出,各有不同的终止条件。输入时,scanf()会忽略空格,而gets()能接收空格。
3177

被折叠的 条评论
为什么被折叠?



