C++動的割当てポインタ配列
3479 ワード
C++Primer 4.34練習ではvectorに存在するstringを取り出し、別の文字配列に格納し、各文字配列のヘッダアドレスを1文字ポインタ配列で格納する必要がある.
文字配列を動的に割り当てるのは難しくありません.
このコードはvectorの要素の個数に基づいてポインタ配列を動的に割り当て、構文は次のとおりです.
最初は、付与文の左側がなぜ2つの*オペレータなのか不思議でしたが、名前は配列を指すポインタを返しますか.しかし、後で考えると、char**charsは、char*(*ptr)、すなわちnewが配列を指すポインタ(*ptr)を返し、その各要素がchar*型であることが理解できる.その後、newをもっとはっきり見せたいのは文字ポインタの配列なので、蛇に足を添えて次の文を書きました.
charsの要素に値を割り当てるときに使用されるのは
文字列を出力する場合、cout<*chars[j]ではなくcout<最後に注目すべきはdeleteの配列空間の場合、delete[]であることを忘れないでください.
文字配列を動的に割り当てるのは難しくありません.
char *ptr = new char[N];
, ( , ), 。
, :
/*******************************************************
* C++ Primer 4.34 4.35 *
* string , *
*vector 。 , vector *
* 。 vector , *
* vector , *
* 。 *
*******************************************************/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<string> ivec;
ivec.push_back("Hello world");
ivec.push_back("Hello everybody!");
ivec.push_back("Hello my family!");
vector<string>::size_type size = ivec.size();
vector<string>::iterator itr = ivec.begin();
vector<string>::iterator end = ivec.end();
vector<string>::size_type vSize = ivec.size(); // vector
char **chars = new char* [vSize]; //
// chars char* ,
// new , char **chars
// new (char*)[vSize], new () 。
int i = 0;
while(itr != end) {
string str = *itr; // vector string
const char* strContent = str.c_str(); // string c
size_t strLength = strlen(strContent); // , null
char *strArray = new char[strLength + 1]; //
chars[i] = strArray; //
// chars[i] *(chars + i)
for(int k = 0; k != strLength + 1; k++) { //
strArray[k] = strContent[k];
}
++itr;
++i;
}
for(int j = 0; j != 3; j++) { //
cout << chars[j] << endl;
delete [] chars[j]; //
}
delete [] chars; //
return 0;
}
このコードはvector
char **chars = new char* [vSize]; //
最初は、付与文の左側がなぜ2つの*オペレータなのか不思議でしたが、名前は配列を指すポインタを返しますか.しかし、後で考えると、char**charsは、char*(*ptr)、すなわちnewが配列を指すポインタ(*ptr)を返し、その各要素がchar*型であることが理解できる.その後、newをもっとはっきり見せたいのは文字ポインタの配列なので、蛇に足を添えて次の文を書きました.
char **chars = new (char*) [vSize];
, , new (),c++ 。
int *p = new (int)[N];
。
charsの要素に値を割り当てるときに使用されるのは
chars[i] = strArray;
文字配列のヘッダアドレスはcharsのi番目の要素に割り当てられ、それはcharsのi番目の要素に等価である.*(chars + i) = strArray
文字列を出力する場合、cout<*chars[j]ではなくcout<