字符串与字符数组

一 . 使用带%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";

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

猜你喜欢

转载自blog.csdn.net/t11383/article/details/78532137