数组的声明、初始化、赋值

一、数组的声明

 
  1. #include<stdio.h>

  2. int main(){

  3. float candy[365];//通过声明告诉编译器数组元素的个数和类型

  4. char code[12];//内含12个char类型元素的数组

  5. int states[50];//内含50个int类型元素的数组

  6. /*数组的编号从0开始,因此candy[0]代表数组第一个元素

  7. candy[364]代表数组的第365个元素*/

  8.  
  9. return 0;

  10. }

二、数组的初始化(对于自动存储类型【数组在函数内部声明且声明时未使用关键字static】必须先初始化,才能使用,对于一些其他的存储类别的变量和数组,若声明时未初始化,编译器会自动把他们的值设为0)

 
  1. #include<stdio.h>

  2. #define SIZE 4

  3. int main(){

  4. /*完全初始化*/

  5. int powers[8]={1,2,4,8,16,32,64};

  6. /*部分初始化*/

  7. int some_data[SIZE]={12,13};//推荐使用符号常量SIZE表示数组大小

  8. /*省略方括号里的数字,让编译器自动匹配数组大小和初始化列表中的项数*/

  9. const int days[]={31,28,31,30,31};//针对这样的数组的大小用sizeof(days)/sizeof(days[0])来计算更合适

  10.  
  11. for(int i=0;i<SIZE;i++){

  12. printf("%2d%14d\n",i,some_data[i]);//如果部分初始化,剩余元素就会被初始化为0

  13. }

  14.  
  15. for(int i=0;i<sizeof days/sizeof days[0];i++){

  16. printf("%2d %d\n",i+1,days[i]);

  17. }

  18. return 0;

  19. }

三、使用初始化器

 
  1. #include<stdio.h>

  2. #define MONTHS 12

  3. int main(){

  4. int days[MONTHS]={31,28,[4]=31,30,31,[1]=29};/*下标为4,即第五个元素指定赋值为31,

  5. 那么后面的值也随之被初始化为30,31,days[1]由于后面被初始化为29,覆盖了之前初始化为28 */

  6. int i;

  7.  
  8. for(i=0;i<MONTHS;i++){

  9. printf("%2d %d\n",i+1,days[i]);

  10. }

  11.  
  12. return 0;

  13. }

四、数组的赋值

 
  1. /*数组元素的赋值*/

  2. #include<stdio.h>

  3. #define SIZE 5

  4. int main(){

  5. int a[SIZE]={2,3,4,5,6};//正确的初始化

  6. int b[SIZE];

  7.  
  8. b=a;/*C不允许把数组作为一个单元赋给另一个数组*/

  9. b[SIZE]=a[SIZE];/*数组下标越界,确保数组下标在0~SIZE-1的范围内*/

  10. b[SIZE]={5,6,8,2};/*除初始化之外,不允许使用花括号列表的形式赋值*/

  11.  
  12. b[0]=1;//正确的赋值

  13. b[1]=2;

  14. printf("%d %d",b[0],b[1]);

  15. return 0;

  16. }

  17.  

五、指定数组的大小

 
  1. #include<stdio.h>

  2. int main(){

  3. float b[0];//不允许这样,数组大小必须大于0

  4. float c[2.5];//不允许,数组大小必须为整数

  5. double m[(int)2.5];//可以,被强制转化为整数

  6. float d[2*3+1];//可以

  7. float e[sizeof(int)+1];//可以

  8. int n;

  9. scanf("%d",&n);

  10. int a[n];//C99允许这样

  11. printf("%d\n",sizeof(a));

  12.  
  13. return 0;

  14. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值