<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C++ on 两点之间</title><link>https://yuehei.37net.com/category/c/</link><description>Recent content in C++ on 两点之间</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Wed, 23 Jul 2014 01:00:00 +0000</lastBuildDate><atom:link href="https://yuehei.37net.com/category/c/index.xml" rel="self" type="application/rss+xml"/><item><title>c++笔记：vector转数组</title><link>https://yuehei.37net.com/2014/07/c%E7%AC%94%E8%AE%B0%EF%BC%9Avector%E8%BD%AC%E6%95%B0%E7%BB%84/</link><pubDate>Wed, 23 Jul 2014 01:00:00 +0000</pubDate><guid>https://yuehei.37net.com/2014/07/c%E7%AC%94%E8%AE%B0%EF%BC%9Avector%E8%BD%AC%E6%95%B0%E7%BB%84/</guid><description>&lt;p&gt;二种转换方式，一种是直接获得vector首地址的指针，别一种再copy一份&lt;/p&gt;
&lt;pre class="brush:cpp;"&gt;vector&amp;lt;char*&amp;gt; vecChar;
	char* p1 = "p12113";
	vecChar.push_back(p1);
	char* p2 = "fdsafdsa";
	vecChar.push_back(p2);
	char* p3 = "sasssssss";
	vecChar.push_back(p3);
	char** a1 = &amp;vecChar[0];
	for (int z = 0; z &amp;lt; vecChar.size(); z++) {
		cout &amp;lt;&amp;lt; "pointer: " &amp;lt;&amp;lt; *(a1 + z) &amp;lt;&amp;lt; " "&amp;lt;&amp;lt; z &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; vecChar[z] &amp;lt;&amp;lt; endl;
	}
	char* arr[vecChar.size()];
	std::copy(vecChar.begin(), vecChar.end(), arr);
	for (int z = 0; z &amp;lt; vecChar.size(); z++) {
		cout &amp;lt;&amp;lt; "copy: " &amp;lt;&amp;lt; arr[z] &amp;lt;&amp;lt; " "&amp;lt;&amp;lt; z &amp;lt;&amp;lt; " " &amp;lt;&amp;lt; vecChar[z] &amp;lt;&amp;lt; endl;
	}&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>c++笔记：动态内存管理</title><link>https://yuehei.37net.com/2014/07/c%E7%AC%94%E8%AE%B0%EF%BC%9A%E5%8A%A8%E6%80%81%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/</link><pubDate>Fri, 18 Jul 2014 17:45:18 +0000</pubDate><guid>https://yuehei.37net.com/2014/07/c%E7%AC%94%E8%AE%B0%EF%BC%9A%E5%8A%A8%E6%80%81%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/</guid><description>&lt;p&gt;内存主要有四块，栈，堆，全局和静态，常量。&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px;"&gt;栈，堆和java一样，开发主要是集中在堆里，能过new,malloc来操作，其它内存都是系统申请释放的。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;关于常量如果用指针修改会报段错误：&lt;/p&gt;
&lt;pre class="brush:cpp;"&gt;char* charP1 = "test const";
	*(charP1+1) = &amp;#39;c&amp;#39;;
	cout &amp;lt;&amp;lt; charP1 &amp;lt;&amp;lt; endl;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;堆操作：&lt;/p&gt;
&lt;pre class="brush:cpp;"&gt;#include &amp;lt;iostream&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;

using namespace std;

void test(string &amp;str);
void test(char* charP);
void getPos();

int main() {
	// stack
	string str = "abcdefghijk";
	test(str);
	// error: type &amp;#39;struct std::string&amp;#39; argument given to &amp;#39;delete&amp;#39;, expected pointer
	// str没有用new分配的是heap空间，数据在stack中，超出作用域自动释放，手动删除会报错
	// 看错误提示，delete后需要跟指针，所以只能delete new返回的
	//delete str;
	cout &amp;lt;&amp;lt; str &amp;lt;&amp;lt; endl;

	// heap
	string* str1 = new string();
	*str1 = "abcdefghijk";
	test(*str1);
	cout &amp;lt;&amp;lt; *str1 &amp;lt;&amp;lt; " str1 address:" &amp;lt;&amp;lt; (void*)str1 &amp;lt;&amp;lt; endl;
	// new分配的heap空间，不删除会内存泄露
	// 删除后可以看到&amp;pos = str1;
	delete str1;
	str1 = NULL;
	getPos();

	int mallSize = 10;
	char* str2 = (char*)malloc(mallSize * sizeof(char));
	memset(str2, 0x00, mallSize);
	strcpy(str2, "abcdef");
	test(str2);
	cout &amp;lt;&amp;lt; str2 &amp;lt;&amp;lt; endl;
	free(str2);
	return 0;
}
void test(string &amp;str) {
	int size = str.size();
	cout &amp;lt;&amp;lt; size &amp;lt;&amp;lt; endl;
	char* charP = new char[str.size() + 1];
	memset(charP, 0x00, str.size() + 1);
	for (int i = 0; i &amp;lt; str.size(); i++) {
		*(charP + str.size() - i - 1) = *(str.c_str() + i);
	}
	//memcpy(charP, str.c_str(), str.size());
	//string &amp;r = str;
	//cout &amp;lt;&amp;lt; (void*) charP &amp;lt;&amp;lt; endl;
	//r = charP;
	str = charP;
	delete[] charP;
	charP = NULL;
	cout &amp;lt;&amp;lt; "return: " &amp;lt;&amp;lt; (void*) charP &amp;lt;&amp;lt; endl;
}
void test(char* charP) {
	char* tmpP = new char[strlen(charP)];
	strcpy(tmpP, charP);
	for (int i = 0; i &amp;lt; strlen(charP); i++) {
		*(charP + strlen(charP) - i - 1) = *(tmpP + i);
	}
	delete[] tmpP;
}

void getPos() {
	char* pos = new char[1];
	*pos = 0;
	cout &amp;lt;&amp;lt; "pos address:" &amp;lt;&amp;lt; (void*)pos &amp;lt;&amp;lt; endl;
}
&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;</description></item></channel></rss>