c++ - C++ 指针的问题

标签 c++ pointers

如果你看一下代码

#include <iostream>

enum Type
{
    INT,
    FLOAT,
    STRING,
};

void Print(void *pValue, Type eType)
{
    using namespace std;
    switch (eType)
    {
        case INT:
            cout << *static_cast<int*>(pValue) << endl;
            break;
        case FLOAT:
            cout << *static_cast<float*>(pValue) << endl;
            break;
        case STRING:
            cout << static_cast<char*>(pValue) << endl;
            break;
    }
}

int main()
{
    int nValue = 5;
    float fValue = 7.5;
    char *szValue = "Mollie";

    Print(&nValue, INT);
    Print(&fValue, FLOAT);
    Print(szValue, STRING);
    return 0;
}

char *szValue = "Mollie"; 行让我感到困惑。从我一直在学习的是,指针是一个保存另一个变量地址的变量。我对该行的问题显然是

  • 这段代码怎么接受一个字符串到一个字符?我们没有指定这个 char 是一个数组。那怎么会呢?
  • 我们如何将字符串分配给指针?我以为我们只能给他们分配其他地址。该指针从哪里获取地址?它在哪里存储值(value)?

我对 C++ 还是个新手,但如有任何帮助,我将不胜感激。

更新:我从下面的答案中了解到,当我们说“它将每个字母分配给 szValue 附近的内存地址”时。字符串中的其余 Chars 存储在 +1 地址中。 C++如何知道原始字符串中有多少个字符/地址?因为 szvalue 只包含第一个字符的地址。其他人不行吗?

来源:LearnCPP - Void Pointers

最佳答案

简而言之,在 C++ 中,指针和数组几乎是一回事。对于编译器,定义 *szValueszValue[] 没有区别。

编译器将字符串文字存储在内存中,第一个符号地址实际上是字符串的值。当您将字符串分配给 char * 时,您可能会对该内存块有不同的使用(即将此地址传递给某个函数或迭代符号)

介意检查您找到的在线教程的更多页面 pointers-arrays-and-pointer-arithmetic .但是我认为学习 C++ 的最佳方式是阅读 Bjarne Stroustrup

编辑:(感谢 seand)

指针和数组差不多,但不完全一样。取 char *x 和 char y[5]。 'y' 就像一个指针,指向固定的东西,但 'x' 可以重新分配。 sizeof y 产生 5。当将 x 或 y 传递给函数时,'y' 的数组性消失了

关于c++ - C++ 指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29786032/

相关文章:

c++ - 如何在 C++ 中比较两个 vector 的字符串内容

c++ - if语句中float的转换

c++ - 限制指针算术或比较的基本原理是什么?

c - 指针框和圆图

C : Why isn't my global variable updating?

c++ - 需要帮助修复段错误(核心转储)

c++ - Qt 中的标准 (?) 按钮

C++:使用运算符 = 调用多参数构造函数

c - C语言中一个数组变量存放在哪里?

c++ - 如何在 C++ 中将对象创建限制为仅指针