读书人

求大神帮忙看个c++ primer的有关问题

发布时间: 2012-09-19 13:43:54 作者: rapoo

求大神帮忙看个c++ primer的问题
int main()
{
vector<string> svec;
string str;
// 输入vector 元素
cout << "Enter strings:(Ctrl+Z to end)" << endl;
while (cin >> str)
svec.push_back(str);
// 创建字符指针数组
char **parr = new char*[svec.size()];
// 处理vector 元素
size_t ix = 0;
for (vector<string>::iterator iter = svec.begin();
iter != svec.end(); ++iter, ++ix)
{
// 创建字符数组
char *p = new char[(*iter).size()+1];
// 复制vector 元素的数据到字符数组
strcpy(p, (*iter).c_str());
// 将指向该字符数组的指针插入到字符指针数组
parr[ix] = p; 指针数组
parr[ix] = p; -----这里不理解啊;似乎作用是将p的地址存储到parr[ix]中;但为什么要拿个数组拿存储p的地址呢???[b][/b]}
cout<<"contents of the vector:"<<endl;
for (vector<string>::iterator iter2 = svec.begin();iter2 != svec.end(); ++iter2)
{
cout<<*iter2<<endl;
}

for(ix=0;ix<svec.size();ix++)
{
cout<<parr[ix]<<endl;-------这里也不明白为什么输出的内容会变成输入的string 类字符串,,,,我以为保存的是p指针的地址??????}
delete [] parr;----------------------这个析构指针数组为什么不是delete *[]parrfor (ix =0; ix != svec.size(); ++ix)
delete [] parr[ix];
system("pause");
return 0;
}

[解决办法]
parr是一个char**的数组,放了一组char*的指针,一组字符串。
parr[ix]是char* 。
parr[ix] = p,

delete对于数组都是 [].
delete*[]没这种写法。
[解决办法]
strcpy(p, (*iter).c_str());
// 将指向该字符数组的指针插入到字符指针数组
parr[ix] = p; 指针数组
parr[ix] = p; -----这里不理解啊;似乎作用是将p的地址存储到parr[ix]中;但为什么要拿个数组拿存储p的地址呢???


这句的外层是一个循环,每次p的值都在变化,parr【ix】 保存的就是 p每次变化的内容。。也就是迭代器中

*iter的内容
[解决办法]
char **parr; 表示一个字符串数组。

parr[]或者*parr都是一个字符串。


举个例子》


char* str="abc"。
str是字符指针,但他也指向一个字符串~

读书人网 >C++

热点推荐