如果你看一下代码
#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 只包含第一个字符的地址。其他人不行吗?
最佳答案
简而言之,在 C++ 中,指针和数组几乎是一回事。对于编译器,定义 *szValue
或 szValue[]
没有区别。
编译器将字符串文字存储在内存中,第一个符号地址实际上是字符串的值。当您将字符串分配给 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/