我正在学习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
pvalue2
给出“指向”字符串文字而不是内存地址?“指针值”不是总是指向它的内存地址吗?为什么指针pvalue2给出了“指向”字符串文字而不是内存地址?
因为有一个特殊的重载,<<
所以流char*
将给出它指向的字符串,而不是指针值。这通常就是您想要发生的事情。
“指针值”不总是指向它的内存地址吗?
是。
为什么解引用仅给出数组中的第一个字符?
因为指针包含单个对象的地址,所以在这种情况下它是数组的第一个元素。其他元素可以使用指针算术来访问,例如pvalue2[2]
,第三个元素。
在这种情况下,如何获取内存地址?
要使用进行打印<<
,请转换为其他指针类型以避免char*
过载:
std::cout << static_cast<void*>(pvalue2);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句