栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++易错点之equal

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++易错点之equal

  上代码!!!

#include
#include
#include

using namespace std;

int main()
{
	char *p[] = {"Hello", "World", "!"};
	char *q[] = {strdup(p[0]), strdup(p[1]), strdup(p[2])};		
	char *r[] = {p[0], p[1], p[2]};
	
	for(int i = 0l i <= 2; ++i)
	// Hello  World  !
		cout << p[i] << "  ";		
	cout << endl;
	
	for(int i = 0l i <= 2; ++i)
	// Hello  World  !
		cout << q[i] << "  ";
	cout << endl;

	for(int i = 0l i <= 2; ++i)
	// Hello  World  !
		cout << r[i] << "  ";
	cout << endl;
	
	cout << equal(begin(p), end(p), q) << endl;		// 0
	cout << equal(begin(p), end(p), r) << endl;		// 1
	free(q[0]);
	free(q[1]);
	free(q[2]);
}
strdup函数将字符串拷贝到新建的位置处。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

  为什么p, q, r三者的内容都是一样的,和p进行比较的时候q和p不相同,r却和p相同呢?

  我们知道,C风格的字符串本质其实是char* 类型,而equal使用==运算符来比较两个序列中的元素。因此equal比较的实际上是元素的地址,q中的字符串是新开辟的空间,因此其地址肯定和p中字符串的空间不同,输出0。r中的字符串实际上就是p中字符串的地址,因此他们相同,输出1。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号