鱼C论坛

 找回密码
 立即注册
查看: 2311|回复: 10

[已解决]关于变长数组的问题(S1E17知识点备忘)

[复制链接]
发表于 2018-4-13 09:26:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
        int n, i;

        printf("请输入字符的个数:");
        scanf("%d", &n);

        char a[n+1];

        printf("请开始输入字符:");
        getchar(); // 将标准输入流中剩下的 '\n' 扔掉
        for (i = 0; i < n; i++)
        {
                scanf("%c", &a[i]);
        }
        a[n] = '\0';
        printf("你输入的字符串是:%s\n", a);

        return 0;
}
既然定义数组时方括号里的数字是数组中元素的个数,那为何上面代码中的char定义为 char a[a+1]?如果+1是为了存放\0的话,那之前的概念该怎样解释呢

int a[6]; // 定义一个整型数组,总共存放6个元素
char b[24]; // 定义一个字符型数组,总共存放24个元素
double c[3]; // 定义一个双精度浮点型数组,总共存放3个元素
上面的几个数组定义,int a[6]代表存放五个整形数据加一个\0吗,char b[24]代表存放23个字符数据加一个\0吗,double c[3]代表存放两个浮点型数据加一个\0吗?
最佳答案
2018-4-13 11:01:20
本帖最后由 风过无痕丶 于 2018-4-13 11:07 编辑
fishyu123 发表于 2018-4-13 10:52
你这句话的意思是只有字符型数组在结束位才会有\0,而int数组系统是不会添加\0结束位的吗


QQ截图20180413110049.jpg

其实还可以举例~
QQ截图20180413110324.jpg
现在发现什么端倪了吗~
没有的话 我再给你附上一个ASCII表
QQ截图20180413110512.jpg
让我再给你一点提示。没有被初始化到的元素都被初始化为0!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-13 09:58:42 | 显示全部楼层
  为什么非字符型数组你也给要给他一个结束位。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 10:27:47 | 显示全部楼层
字符型占1个字节
int double 根据实行电脑情况不同而异。

C不存在字符串的概念,所以表字符数组来表示。约定最后一位必须是'\0' 以'\0'定为结束标志
也可以直接用字符指针写为
char *a="i love fishc"

规定而已,就这么简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-13 10:27:49 | 显示全部楼层
风过无痕丶 发表于 2018-4-13 09:58
为什么非字符型数组你也给要给他一个结束位。。。

非字符型数组不需要\n吗?那下面这个语句是应该存放23个元素了加一个\n了?
char b[24]; // 定义一个字符型数组,总共存放24个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 10:42:54 | 显示全部楼层
fishyu123 发表于 2018-4-13 10:27
非字符型数组不需要\n吗?那下面这个语句是应该存放23个元素了加一个\n了?
char b[24]; // 定义一个字 ...

'\0'  表示一个空字符!
printf 以 %s输出的时候 遇到'\0'了他就会停止继续读取了。你可以暂时把他理解为一个字符串的结束的标志位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-13 10:48:07 | 显示全部楼层
风过无痕丶 发表于 2018-4-13 10:42
'\0'  表示一个空字符!
printf 以 %s输出的时候 遇到'\0'了他就会停止继续读取了。你可以暂时把他理解 ...

不好意思我刚才打错了,我是说
非字符型数组不需要\0吗?那下面这个语句是应该存放23个元素了加一个\0了?
char b[24]; // 定义一个字符型数组,总共存放24个元素

如果是char [3]的话,他里面存放的数据是{'a','c','\0'}这样还是说{‘a’,'b','c','\0'}这样?我不懂在这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 10:51:47 | 显示全部楼层
'\0'  也是一个元素!  你也可以在最后一个不放结束位! 你也可以放字符!当然!输出的时候你就要用一点点手段了!

所以!我决定来晕一下你!  

  1. #include <stdio.h>

  2. int main(void) {

  3.         char a[6] = "abcdef";  // 这里是6个  
  4.         char b[6] = "abcde";   // 这里是5个


  5.         for (int i = 0; i < 6; i++) {
  6.                 printf("%c", a[i]);
  7.         }
  8.         putchar('\n');
  9.         printf("%s", b);

  10.         getchar();

  11.         return 0;
  12. }
复制代码

QQ截图20180413105145.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-13 10:52:24 | 显示全部楼层
风过无痕丶 发表于 2018-4-13 09:58
为什么非字符型数组你也给要给他一个结束位。。。

你这句话的意思是只有字符型数组在结束位才会有\0,而int数组系统是不会添加\0结束位的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 11:01:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕丶 于 2018-4-13 11:07 编辑
fishyu123 发表于 2018-4-13 10:52
你这句话的意思是只有字符型数组在结束位才会有\0,而int数组系统是不会添加\0结束位的吗


QQ截图20180413110049.jpg

其实还可以举例~
QQ截图20180413110324.jpg
现在发现什么端倪了吗~
没有的话 我再给你附上一个ASCII表
QQ截图20180413110512.jpg
让我再给你一点提示。没有被初始化到的元素都被初始化为0!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-13 11:07:06 | 显示全部楼层
风过无痕丶 发表于 2018-4-13 10:51
'\0'  也是一个元素!  你也可以在最后一个不放结束位! 你也可以放字符!当然!输出的时候你就要用一点点 ...

谢谢了,我好像明白了,只有字符串末尾才会有\0,数字没有。
刚才你的程序我运行不成功,因为char a[6]无法放入六个字母,系统默认最后一位是\0,改成7就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-13 13:26:40 | 显示全部楼层
fishyu123 发表于 2018-4-13 11:07
谢谢了,我好像明白了,只有字符串末尾才会有\0,数字没有。
刚才你的程序我运行不成功,因为char a[6] ...

哦哦,明白了,请问你用的是什么软件检查代码的,感觉很不错哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表