gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:48:51 25 4
gpt4 key购买 nike

如果你看一下代码

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com