菜鸟问题,求助!
本人菜鸟,遇到一个问题,请高手指教,感谢。
下面是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()); 个人理解是把(*iter).c_str() 的内容复制到 了p所指向的内存块中。而不是复制给p所在的内存地址中。// 将指向该字符数组的指针插入到字符指针数组
parr[ix] = p;
}
// 输出vector 对象的内容
cout << "Content of vector:" << endl;
for (vector<string>::iterator iter2 = svec.begin();iter2 != svec.end(); ++iter2)
cout << *iter2 << endl;
// 输出字符数组的内容
cout << "Content of character arrays:" << endl;
for (ix =0; ix != svec.size(); ++ix)
cout << parr[ix] << endl; 疑问,按照我的理解,这里parr[ix]应该为指针,要取里面的值,应该是*parr[ix],但是实际却不是,而是直接parr[ix],所以很费解,大神指导下
// 释放各个字符数组
for (ix =0; ix != svec.size(); ++ix)
delete [] parr[ix];
// 释放字符指针数组
delete [] parr;
return 0;
}