代码之家  ›  专栏  ›  技术社区  ›  Johan

如何将指针指向字符

  •  -1
  • Johan  · 技术社区  · 8 年前

    所以我想把一个指针指向一个字符,然后输出地址,把它输出这个奇怪的东西:t+a。有什么帮助吗?

    #include <iostream>
    
    using namespace std;
    
    int main() {
    
    char a = 't';
    char* p = &a;
    
    cout << p;
    
    return 0;
    }
    
    3 回复  |  直到 8 年前
        1
  •  5
  •   Daniel Trugman    8 年前

    您正在打印 char* 类型,其中 cout 尝试解释为字符串。

    打印指针的值( 它指向)使用:

    cout << (void *)p;
    -- OR --
    cout << static_cast<void *>(p);
    
        2
  •  3
  •   nwp    8 年前

    问题是 char * 通常不只是用作指向 char ,但指向 null-terminated C-string 相反 cout will then print all the characters pointed to by p until it finds a '\0' ,所以你可以看到 t 然后打印无效内存,这是一种未定义的行为,可能会崩溃或打印垃圾或其他东西。

    void * 或者也许 const void * 相反,它只是一个带有地址但没有附加类型信息的指针。 void *p = &a; 这是一个解决方案。 void *p2 = p; 然后使用 std::cout << p2; static_cast<const void*>(p) 而不是像C一样 (void *)p 因为一旦你习惯了它们,它们就会变得更容易阅读和思考。

        3
  •  0
  •   Killzone Kid    8 年前

    若需要指针的地址,可以将其强制转换为void指针

    std::cout << (void *)p;
    

    或使用 printf 带%p选项

    printf("%p", p);
    

    否则,它将被视为以null结尾的字符串,而事实并非如此。