2

我试图弄清楚这段代码是如何工作的,有人可以帮我完成这里正在进行的流程:就像是什么*(++cp)意思?在我看来,我认为它的 = str + 7 And *oddNums= 1 是oddNums 数组的开始。所以str + 8经过数学 which = ld 对不起,我真的不明白。

int main ()
{
    int oddNums[5] = {1, 3, 5, 7, 9};
    char str[20] = "Hello world";
    int *ip = oddNums;
    char *cp = str + 6; 

    printf("\n.%c",*(++cp) + *oddNums);


    return EXIT_SUCCESS;
}
4

2 回答 2

9
printf("\n.%d",*(++cp) + *oddNums);

把它分解。这相当于:

++cp;
printf("\n.%d", *cp + *oddNums);

cp现在第一条语句递增cp == str + 7。替换cp修改后的 printf 产生:

printf("\n.%d", *(str + 7) + *oddNums);

*(str + 7)与 相同str[7],是单个字符'o'*oddNums是 1. 执行最后一次替换产生:

printf("\n.%d", 'o' + 1);

它打印字符'p'。或者更确切地说,它打印 ASCII 值'p'—112 — 因为我们有一个%d格式而不是%c.

于 2013-05-28T22:50:19.930 回答
3
int oddNums[5] = {1, 3, 5, 7, 9};

int这将创建一个 5 s的数组。如果你参考oddNums[2],那会给你5。如果您引用,那是指向数组开头的oddNums指针。int所以*oddNums会给你1,*(oddNums+1)会给你3,依此类推。

char str[20] = "Hello world";

请参阅我关于oddNums上面的讨论,这适用于此处。这也是一个字符串,这意味着它在字母之后以零结尾d

int *ip = oddNums;

记住oddNums是一个指向整数的指针。所以这只是将它复制到另一个int名为ip.

char *cp = str + 6; 

这会将值分配(str + 6)char指针cpstrchar指向上面定义的字符串的指针。它指向字符串“Hello world”的开头。

printf("\n.%d",*(++cp) + *oddNums);

*(++cp)表示在递增之后获取cp指向的内容。换句话说,preincrement,然后得到它指向的东西。指向+ 6,这是字符串中的。但是让它指向“世界”中的“o”。所以会产生一个'o'。 cp cpcpstrw++cp*(++cp)

然后'o'被添加到任何oddNums点。自从我们开始之后什么都没有发生oddNums,所以它仍然指向整数数组中的 1。*oddNums说“给我什么oddNums指向”,即 1。

*(++cp) + *oddNums所以的值为'o' + 1,即 'p'(ASCII 序列中的下一个字母)。

有趣的是,它printf说“在打印换行符和句点后将给定的内容打印为整数”(“\n.%d”)。因此,结果将是.112...... 我认为。

于 2013-05-28T22:56:11.473 回答