gpt4 book ai didi

c - 理解 printf 语句中的指针逻辑

转载 作者:行者123 更新时间:2023-12-01 13:48:37 24 4
gpt4 key购买 nike

我正在学习 C 中的指针,但我对这个示例有点困惑。下面三个 printf() 语句中指针的指针逻辑是什么?这些是什么:*(char*)ptr*(int*)ptr(char*)ptr+2,到底在做什么?

#include<stdio.h>
int main()
{
void *ptr;
char ch=74, *cp="CS107";
int j=65;
ptr=&ch;
printf("%c\n", *(char*)ptr);
ptr=&j;
printf("%c\n", *(int*)ptr);
ptr=cp;
printf("%s\n", (char*)ptr+2);
return 0;
}

最佳答案

我相信您已经得到了答案,但只是为了澄清一个隐藏点,让我在现有答案中添加更多信息。

  • printf("%c\n", *(char*)ptr);

    将 void 指针 ptr 转换为 char 指针,然后取消引用以打印 char 值。

  • printf("%c\n", *(int*)ptr);

    将 void 指针 ptr 转换为 int 指针,然后取消引用以打印 int< 的 char 表示 值。

  • printf("%s\n", (char*)ptr+2);

    在这里,operator precedence发挥作用。由于转换运算符优先于二进制加法,首先 ptr 将被转换为 char *,然后指针运算将生效,将指针递增到指向第 3 个 char 元素(基于 0 的索引,还记得吗?)。

关于c - 理解 printf 语句中的指针逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com