gpt4 book ai didi

c - 为什么不能根据它指向的变量类型推断指针类型?

转载 作者:行者123 更新时间:2023-12-02 19:01:54 27 4
gpt4 key购买 nike

问题:如果编译器知道一个 int 进入一个地址,那么它在读取时就记不住 int 存在,是否有任何特殊原因?

  1. 据我了解,第 0 行 告诉编译器为在第 3 行 赋值时放置的任何值分配 16 位。

  2. 据我了解,在 第 1 行 声明指针类型的原因之一是告诉编译器在取消引用指针时要读取多少字节 p > 在第 6 行 上使用 *p

    0:    int i;
1: int *p;
2:
3: i = 5;
4: p = &i;
5:
6: printf("%d",*p);

为简单起见,在 mem 表中使用位宽 8。假设i写入在0x04处,p写入在0x02处。

  addr | storedVal  
-----------------
0x01 |
0x02 | 00000100
0x03 |
0x04 | 00000000
0x05 | 00000101

最佳答案

如果语言允许的话可能是这样;在 C++ 中,您可以将 p 的声明延迟到赋值点,然后执行以下操作:

auto p = &i;

它会推断出p是一个int*。但 C 并没有这样做。它没有用于派生对象类型的语法工具,因此您需要显式声明该类型。

如果您谈论的是 printf,则 printf 是一个可变参数函数;它不知道传递给它的变量的类型(一些编译器将其特殊化以在编译时进行检查,但这是一个实现细节,而不是语言保证;在运行时它不知道)。它只知道查找 int,因为 %d 占位符告诉它要检查它(并且 printf 内部不涉及任何指针;它传递的是从指针读取的原始 int,而不是指向 int 的指针)。

关于c - 为什么不能根据它指向的变量类型推断指针类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65444278/

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