用指针打印

upl*_*com 2 c printf pointers

我试图弄清楚这段代码是如何工作的,有人可以帮助我完成这里正在进行的过程:那*(++cp)是什么意思?在我看来,我在想它= str + 7*oddNums= 1是oddNums数组的开始.所以str + 8在数学后= 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;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 9

printf("\n.%d",*(++cp) + *oddNums);
Run Code Online (Sandbox Code Playgroud)

分解.这相当于:

++cp;
printf("\n.%d", *cp + *oddNums);
Run Code Online (Sandbox Code Playgroud)

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

printf("\n.%d", *(str + 7) + *oddNums);
Run Code Online (Sandbox Code Playgroud)

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

printf("\n.%d", 'o' + 1);
Run Code Online (Sandbox Code Playgroud)

它打印角色'p'.或者更确切地说,它打印的ASCII值为'p'-112,因为我们有%d格式而不是%c.