【问题标题】:Concept of pointers in C is not clear [closed]C中指针的概念不清楚[关闭]
【发布时间】:2017-07-17 10:37:21
【问题描述】:

我在 Ubuntu 终端上尝试了代码

int main() {
    int y = 10;
    int *int_ptr;
    int_ptr = (int *) y;
}

我已经在一个程序中分配了这些代码。我想通过解释步骤来了解上面代码的正确实现。最后一行代码,如果是 int_ptr= &y; 我没有问题,但是我的代码没有得到指针 int_ptr 所指向的内容。

【问题讨论】:

  • 你了解y&y的区别吗?
  • C阅读一本好书
  • 我们不是老师,免费在线做基础C课程。
  • 最后一条语句没有将y的地址分配给int_ptr;它将存储在y (10) 中的值转换为指针类型并将结果分配给int_ptr
  • @dlmeetei:“读一本好书关于 C”的问题是大多数关于 C 的书都糟糕。我们需要引用我们认为好的特定书籍(例如KingHarbison & Steele)。

标签: c unix


【解决方案1】:
int *int_ptr;

int_ptr 用于存储int 类型变量的地址。 要获取变量的地址,比如int t,您需要使用 & 运算符。 但是通过执行上述操作,您只需将整数 10 分配给 int_ptr

当你声明变量时说

int x = 34;

有两件事在起作用:

  • 说 0x10000 是存储 x 的地址;这个地址是用 & 运算符获得的。
  • 和 34 是 x 的值。

要通过指针访问x,您需要第一个值。

【讨论】:

    【解决方案2】:

    在最后一行,您将地址 0x0000000A 分配给 int_ptr。 因此,使用 *int_ptr,您正在读取地址存储在 0x0000000A 的内存。

    【讨论】:

      【解决方案3】:

      发布的代码中有一个错误,但演员 (int *) 正在掩盖它。

      你应该把y的地址让int_ptr指向y

      int main(void) {
          int y = 10;
          int *int_ptr;
          int_ptr = &y;
      }
      

      使用强制转换,您是在告诉编译器您知道自己在做什么并且真的想将y 转换为一些int 的地址以存储到@987654328 @。如果没有强制转换,编译器应该会发出警告,告诉您可能的编程错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-27
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多