第六章-----数组

 

概念:同一类型数据存在连续的存储空间内,C语言不允许对数组的大小做动态定义。

            可变长数组:   

#include<stdio.h>
int main(){
	
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]); 
	}

	return 0;
}
#include<stdio.h>
void func(int n){	
	int a[2*n];
	for(int i=0;i<2*n;i++)
		scanf("%d",&a[i]); 
	
	for(int i=0;i<2*n;i++)
		printf("%d\n",a[i]);	
}
int main(){ func(4)}

            不可变长数组:指定了数组的静态存储方式,则不可使用"可变长数组"

#include<stdio.h>
void func(int n){	
	static int a[2*n];
	for(int i=0;i<2*n;i++)
		scanf("%d",&a[i]); 
	
	for(int i=0;i<2*n;i++)
		printf("%d\n",a[i]);	
}
//cpp In function 'void func(int)':
//[Error] storage size of 'a' isn't constant

int main(){ func(4)}

初始化:

  • 一维数组
  1. 定义时对全部元素赋值:
int a[10]={1,2,3,4,5,6,7,8,9,10};

     2.可以只给部分元素赋值:

int a[10]={1,2,3,4,5};

     指定了数组长度并对之初始化,范围被初始化元素,系统会自动初始化为0,字符型初始化为'\0',指针型为NULL

     3.可以给数组中全部元素赋0:

int a[5]={0,0,0,0,0};
int a[5]={0};

     4.对全部数组元素赋值时,由于数据个数已经确定,因此可不指定数组长度:

int a[5]={1,2,3,4,5};
int a[]={1,2,3,4,5};

 

  • 二维数组

     1.分行给二维数组赋值:

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

     2.可以将所有数据写在一个花括号内,按数组元素在内存位置赋值:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][3]={1,0,2,4};

     3.可以对各行中的某几个元素赋值:

int a[3][4]={{1},{0,6},{0,0,1,11}};
int a[3][4]={{1},{5,6}};
int a[3][4]={{1},{},{0,9}};

     4.可以对一维进行缺省,但二维必须定义大小

int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int a[][4]={{0,0,3},{},{0,10}};

 

字符数组:

     1.在程序中往往依靠检测 '\0' 的位置来判断字符串是否结束,而不是依靠数组的长度。

     2.'\0' ASCII码为0不可显示的字符,是一个空字符。

     3.一般默认向字符串后+ '\0'

        printf("HOW Do YOU \n");

        在向内存中存储时,系统自动在最后一个字符 '\n' 后加一个 '\0' ,作为字符串结束标志。

char c[]={"China"};
printf("%s\n",c);

        数组c的存储情况为:

China\0

        

     4.字符数组并不一定都含有 '\0' ,甚至可以不含有 '\0' ,也是合法的。

       char c[5]={'C','h','i','n','a'};                                   例如:

China


     5. 在输入多个字符串时 ,以空格为 “ 分隔符 ”

       例如:

       char str1[5] , str2[5] , str3[5] ;

       scanf("%s%s%s",str1,str2,str3);

       输入数据:How are you

       由于有分隔符,作为3个字符串输入,在输入完后,str1,str2,str3数组状态如下:

       

How\0\0
are\0\0
you\0\0

       

       由于系统把 “空格符” 作为输入的字符串之间的分隔符,因此只将空格前的字符 “How” 送到 str 中,作为独立的字符串处理。

       char str[15];

       scanf("%s",str);

       输入数据:How are you

       由于有分隔符,在输入完后,str 数组状态如下:

How\0\0\0\0\0\0\0\0\0\0\0\0

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值