字符串与字符数组

一 . 使用带%s格式符的scanf函数读入字符串时,不需要再参数前加取地址符&。
原因:编译器会自动将数组名作为数组首地址来处理。
如:scanf("%s", str);
二 . 字符数组与字符串
(这两个概念其实现在我也不是很清楚),但看到的一句话可以帮助理解:在C语言中,将字符串当作字符数组处理。

字符数组的初始化:

              char str[3] = {'a', 'b', 'c'};
              char str[3] = {'a', 'b'};       ——剩余的元素值自动设为空字符'\0'。
              怎样证明剩余的元素值自动设为了空字符呢?
              我们可以输出它的ASCⅡ值:
              #include <stdio.h>
              int main()
              {
                int str[3] = {'a', 'b'};
                printf("%d", str[2]);
                       //因为数组是从str[0]开始记的
                printf("\n");
                return 0;
              }
              由于刚开始在上面的那段代码中我输出用的,但运行时仍是0,这是不是说明了一个问题呢:
              当C编译器在程序中遇到长度为n的字符串常量时,他会为这个字符串常量分配长度为n+1的字符数组空间,最后一个空间用于存储空字符'\0',用来标志字符串的结束。
              但问题是,这并不是字符串啊,这是使用逐个字符列举的方式对字符数组进行初始化的!!!!
![这是我分别改为输出str[3],str[4],str[5]的结果,每次改后执行了两次](https://img-blog.csdn.net/20171114163211919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![但如果我定义为char类型后,分别输出str[2]和str[3]又是这种情况](https://img-blog.csdn.net/20171114163603216?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
不清楚为什么会这样,现在还找不到答案!!

字符串(用字符串常量初始化字符数组):

              char str[] = {"hello"};
              char str[] = "hello";

强调:字符串用双引号”“,字符常量用单引号’ ’ 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值