此函数如何工作“ abcdefghijklmnopqrstuvwxyz” [rand()%26]?

时间:2019-12-02 19:09:34

标签: c random generate

生成随机的字母

"abcdefghijklmnopqrstuvwxyz" [rand()%26]

这是如何工作的?

3 个答案:

答案 0 :(得分:8)

实际上这个表达式

"abcdefghijklmnopqrstuvwxyz" [rand()%26]

等同于

char * p =“ abcdefghijklmnopqrstuvwxyz”;

p[rand()%26]

这是使用下标运算符从字符串文字中选择的随机字符。

原始表达式中使用的字符串文字会隐式转换为指向其第一个元素的指针。

表达式rand()%26产生[0, 25]范围内的随机值(余数)

答案 1 :(得分:4)

字符串文字是一个数组表达式,因此您可以像其他任何数组表达式 1 一样对它进行下标。

这相当于写作:

const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
int idx = rand() % 26;
char c = alphabet[idx];

rand() % 26返回[0..25]范围内的(伪)随机值,该值用于索引字母数组。

您经常不会看到像这样的文字被下标,因为它很难读并且并不总是很明显。


  1. 严格来说,表达式“衰减”以键入char *,这就是[]运算符的作用。

答案 2 :(得分:3)

C中的

字符串文字实际上是数组(通常会衰减到指向第一个元素的指针)。您可以像对其他数组一样索引这些数组(这就是这里发生的事情)。