以下定义实际上在做什么?

Vag*_*ish 3 c arrays

在SO的一个问题中,我遇到了下面的定义:

char randchar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" [rand() % 26]; 
Run Code Online (Sandbox Code Playgroud)

我知道这rand() % 26会给出0到25之间的随机数.但是上面的定义实际上发生了什么?当评估表达式时(编译时或运行时)?堆栈的包含内容是什么.

我们在C中称之为这样的定义.这个特征是什么?

M.M*_*M.M 8

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" [rand() % 26];是一个表达式,用作初始化的randchar.

  • "ABCDEFGHIJKLMNOPQRSTUVWXYZ"是一个27 char(26个字母和一个空终止符)的数组.
  • 方括号是数组索引运算符.
  • rand() 生成一个随机数
  • rand() % 26将其转换为介于0和之间的数字25(包括)
  • 该结果用作数组索引.
  • 所述char阵列中的被复制到randchar.

它原本可以写成:

char const letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int random_number = rand() % 26;

char randchar = letters[random_number];
Run Code Online (Sandbox Code Playgroud)

  • 它具有静态存储持续时间并且是不可修改的.要查看编​​译器使用它做什么,您可以编译代码并检查链接器映射 (2认同)