初始化字符数组的方法总结

字符数组建成字符串,由于字符串的应用及其广泛,而且在C语言中目前只有char这一变量类型既可以输出数字又可以输出字符,所以字符数组的变量类型也就只有char了。
首先要注意:字符数组即字符串,说白了就是由一个个字符组成的。所以不管你输入的字符串里面有数字或是字符,存储的形式都是ASC数字!!
以下的所有方法都是以ASC数字存储的类型,若想以原数字存储,则代码为:

char a[4];
scanf("%d%d%d%d", &a[0],&a[1],&a[2],&a[3]);

并且注意输入的时候要用空格隔开。
方法一:大括号型
特点:1.大括号内从左至右的元素与数组中的“序号”一一对应

                     char a[4] = {'R','o','c','k'};  =>   char a[4];
                                                          a[0] = 'R';
                                                          a[1] = 'o'; 
                                                          a[2] = 'c' ;
                                                          a[3] = 'k';` 

2.只能如上述例子的样式,不能像这样

       char a[4];
       a[0] = {'R'};
       a[1] = {'o'};    <==   **错误代码**
       a[2] = {'c'}; 
        a[3] = {'k'}; `        

为什么不能这样?根据第一个特点,a[0] = {‘R’}就表示其他的a[1] a[2] a[3] a[4] 存储的都是0。
方法二:直接命名型
特点:1.将字符数组视为变量,命名规则与命名变量的规则一样
char a[5] = "Rock"; => char a[5] = {'R','o','c','k',0};
2.可以对每一个元素单独命名

       char a[5] ;
       a[0] = 'R'
       a[1] = 'o';
       a[2] = 'c';   
       a[3] = 'k';
       a[4] = 0;          =>  char a[5] = "Rock";

`
千万不要这样: 一来就直接对a[0]命名是错误的

       char a[0] = 'R';
       a[1] = 'o';
       a[2] = 'c';
       a[3] = 'k';
       a[4] = 0;`

总结起来就是下面这三种初始化方法:

char a[5] = {'R','o','c','k',0};   <=>   char a[4];   <=>  char a[5] = "Rock";
                                       a[0] = 'R';
                                       a[1] = 'o'; 
                                       a[2] = 'c' ;
                                       a[3] = 'k';` 
                                       a[4] = 0;

当然,为了避免数组的越界,程序员也经常在数组名后面不加下标直接输入字符串,如:

char name[] = "Rock";
printf("一共有%d个字节", sizeof(name));

编译结果为:一共有5个字节
当然,也可以这样:

char name[] = {'R','o','c','k',0};

显然也有5个字节
我们知道电脑在保存字符数组的时候会在末尾多保存上一个结束字符,也就是数字0。按照常理,上面两种方法是等价的,即

char name[] = "Rock";  ==  char name[] = {'R','o','c','k',0};

但是,当你用大括号的方式像下面这样输入时:

char name[] = {'R','o','c','k'};

即你把最后的结束字符0给去掉了,编译结果为:一共有4个字节。但不会出错,这就很奇怪了。
但是要注意:不加下标的写法只能直接命名,不能像这样:

char a[];                                         char a[];
scanf("%s",a);                                gets(a);

这样的代码是错误的,必须在数组名后直接命名。

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值