【问题标题】:Why is pointer not printing any value?为什么指针不打印任何值?
【发布时间】:2021-09-12 05:48:19
【问题描述】:

我正在尝试使用指针的基本 c 程序,这是我的代码

#include <stdio.h>

int main()
{
    int *p;
    
    for(int i=0;i<10;i++){
        *p = &i;
        printf("%d",*p);
    }
    
    return 0;
}

输出:

main.c:16:12: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
         *p = &i;
            ^

...Program finished with exit code 0

并且不打印该值。分配从 for 循环到指针的变量 i 是否有任何问题?

【问题讨论】:

  • 这更像是“C”而不是“C++”。 (包括 和 printf).. 但是您正在尝试将地址 (&i) 分配给 int (*p),*p 表示 p 指向的东西。所以你的意思可能是“p=&i”。
  • int *p 声明了指针 p。将地址分配给p 时,您将执行p = &amp;i 并使用%p 转换说明符输出地址,例如printf("%p\n",(void*)p); 如果您确实想打印该地址的值,那么您可以使用printf ("%d\n", *p); 来打印i 的值。
  • 一些提供指针基本讨论的链接可能会有所帮助。 Difference between char pp and (char) p?Pointer to pointer of structs indexing out of bounds(?)...(忽略标题,答案讨论指针基础知识)

标签: c++


【解决方案1】:

P 是指针。因此,如下分配指向它的指针。

p = &i;

然后在你的代码中如下使用它。

#include <stdio.h>

int main()
{
    int *p;
    
    for(int i=0;i<10;i++){
        p = &i;
        printf("%d",*p);
    }
    
    return 0;
}

【讨论】:

    【解决方案2】:

    使用 std::cout 进行修复和更多 C++ 风格的输出。 (Why not use printf() in C++)

    #include <iostream>
    
    int main()
    {
        int* p{ nullptr }; // initialize before use. 
    
        for (int i = 0; i < 10; i++) 
        {
            p = &i;
            std::cout << *p << " ";
        }
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      使用此代码。 我认为它会起作用的

      int* p =NULL;
      *p = sizeof(i); // casting int to pointer
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案4】:

      这里的P是一个整数指针,而指针是一个变量,它存储了另一个变量的地址。所以你必须将变量(i)的地址分配给变量(p),比如

      p=&i;
      

      在这一行中,您将 i 的地址存储在变量 p 中。 当你点 p 喜欢时,*p 它会给你那个地址的值。

      #include <stdio.h>
      
      int main()
      {
          int *p;
          
          for(int i=0;i<10;i++){
              p = &i;
              printf("%d",*p);
          }
          
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        相关资源
        最近更新 更多