为什么数组可以包含字符串的元素?

Why can an array encompass elements of strings?

提问人:Jamth 提问时间:10/12/2023 最后编辑:Vlad from MoscowJamth 更新时间:10/12/2023 访问量:65

问:

我不明白为什么以下数组中包含双引号;这不是字符串类型吗?

const uint8_t u8x8_font_8x13_1x2_n[436] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_n") = 
  " :\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0@P\340\340P@\0\0\0\1\0\0\1\0\0\0\0\0\300\0\0\0\0\0\1\1\7"
  "\1\1\0\0\0\0\0\0\0\0\0\0\0 \30\30\10\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1"
  "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\0\200@\60\0\30\4\2\1"
  "\0\0\0\0\0\300 \20\20 \300\0\0\7\10\20\20\10\7\0\0@ \360\0\0\0\0\0\20\20\37"
  "\20\20\0\0\0`\20\20\20\20\340\0\0\30\24\22\22\21\20\0\0\20\20\20\220P\60\0\0\10\20\21"
  "\21\21\16\0\0\0\200@ \360\0\0\0\7\4\4\4\37\4\0\0\360\20\220\220\220\20\0\0\11\21\20"
  "\20\20\17\0\0\300 \20\20\20\0\0\0\17\22\21\21\21\16\0\0\20\20\20\220P\60\0\0\0\30\6"
  "\1\0\0\0\0\340\20\20\20\20\340\0\0\16\21\21\21\21\16\0\0\340\20\20\20\220\340\0\0\0\21\21"
  "\21\10\7\0\0\0\200\300\200\0\0\0\0\0\20\71\20\0\0";

下面的示例表示我常用的数组声明格式。

int arr[10]={1,2,3,4,5,6,7,8,9,10};
c 翻译 声明 string-concatenation string-literals

评论

0赞 Weather Vane 10/12/2023
什么?U8X8_FONT_SECTION
0赞 Jamth 10/12/2023
这应该是一个宏观定义;以下代码与它相关联。#ifndef U8X8_FONT_SECTION # define U8X8_FONT_SECTION(name)
0赞 Frankie_C 10/12/2023
在 C 语言中,您可以简单地用双引号关闭和重新打开更多部分的字符串。在您的例子中,您有一个字符串,其中包含转义数字(主要是十进制)和标准字符(许多“@”)。由于数组数据定义为字符串格式,因此它还包括 null 终止字符零。
1赞 Gerhardh 10/12/2023
字符串文字只是定义数组的一种更方便的形式。相反,您还可以写入以初始化数组。考虑到这一点,这与用于阵列的没有太大区别。char"hello"{'h','e','l','l','o',0}int
0赞 Gerhardh 10/12/2023
您主要关心的是使用字符串文字来初始化数组,还是使用带有字符串的多行?uint8_t

答:

1赞 Vlad from Moscow 10/12/2023 #1

从 C 标准(5.1.1.2 转换阶段)

1 翻译语法规则的优先级由 以下阶段。

//...

  1. 相邻的字符串文字标记是串联的。

例如,这个声明

char s[] = "Hello World!";

相当于

char s[] = "Hello " 
           "World!";

将一个大字符串文本拆分为几个相邻的字符串文本使代码更具可读性。