如何在C ++中为char数组动态分配内存?

HJS

我正在学习C ++中的动态内存。我了解到的一种为任何数据类型动态分配和取消分配的标准方法是,例如,

//For double,
double* pvalue1 = nullptr;
pvalue1 = new double;
*pvalue1 = 17.3;
delete pvalue1; //free up when I'm done

但是,对于char数组,我了解到它的处理方式不同:

char* pvalue2 = nullptr;
pvalue2 = new char[6];
strncpy(pvalue2,"Hello",sizeof("Hello"));

std::cout << "Pointed-to value of pvalue2 is " << *pvalue2 << std::endl;
std::cout << "Value of pvalue2 is " << pvalue2 << std::endl;

delete [] pvalue2; //free up when I'm done

然后,在命令提示符下:

Pointed-to value of pvalue2 is H
Value of pvalue2 is Hello
  1. 指针为什么pvalue2给出“指向”字符串文字而不是内存地址?“指针值”不是总是指向它的内存地址吗?
  2. 为什么解引用仅给出数组中的第一个字符?
  3. 在这种情况下,如何获取内存地址?
迈克·西摩

为什么指针pvalue2给出了“指向”字符串文字而不是内存地址?

因为有一个特殊的重载,<<所以流char*将给出它指向的字符串,而不是指针值。这通常就是您想要发生的事情。

“指针值”不总是指向它的内存地址吗?

是。

为什么解引用仅给出数组中的第一个字符?

因为指针包含单个对象的地址,所以在这种情况下它是数组的第一个元素。其他元素可以使用指针算术来访问,例如pvalue2[2],第三个元素。

在这种情况下,如何获取内存地址?

要使用进行打印<<,请转换为其他指针类型以避免char*过载:

std::cout << static_cast<void*>(pvalue2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章