C语言中的数组

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

       数组是相同类型的若干数据的有序集合,系统会给数组分配一块连续的存储区域,按照元素类型分类可分为整型数组、实型数组、字符型数组、指针数组等,按照下标个数可分为一维数组、二维数组和多维数组。
一、一维数组
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;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值