[英]C++ Simple Pointer Passing
我對C ++還是很陌生,在接觸所有指針方面遇到一些問題。 基本上,我將指針傳遞給函數,並在該指針處創建一個數組。 回到main函數中,我無法訪問該數組。
這是我的代碼:
#include <iostream>
using namespace std;
void createArray(char** dict, int* arraysize)
{
*arraysize = 26*26*26*26;
delete dict;
dict = 0;
//Initialisiere character array of character
//char **wortliste = 0;
dict = new char*[*arraysize];
for(int i = 0; i < *arraysize; i++)
dict[i] = new char[5];
int ctr = 0;
//Erstelle Einträge (sortiert)
for (char i = 'A'; i <= 'Z'; i++)
{
for (char j = 'A'; j <= 'Z'; j++)
{
for (char k = 'A'; k <= 'Z'; k++)
{
for (char l = 'A'; l <= 'Z'; l++)
{
dict[ctr][0] = i;
dict[ctr][1] = j;
dict[ctr][2] = k;
dict[ctr][3] = l;
dict[ctr][4] = '\0';
ctr++;
}
}
}
}
}
int main(void)
{
char** dict = 0;
int arraysize;
createArray(dict, &arraysize);
cout << dict[0] << endl << dict[arraysize-1] << endl;
return 0;
}
我無法弄清楚我的錯誤,非常感謝您。
在C ++中,參數按值傳遞(除非顯式標記為引用參數),因此,當您將dict
(指向char
的指針)傳遞給createArray
,函數內部的dict
是一個不同的對象,盡管具有相同的初始值值,作為dict
中main
。 如果要查看main
dict
更改,則必須通過引用將其傳遞,或將其地址傳遞給帶有char ***
的函數。
例如
void createArray(char**& dict, int* arraysize)
要么
void createArray(char*** pdict, int* arraysize)
{ // use (*pdict) instead of dict ...
和
// ...
createArray(&dict, &arraysize);
一種更“ C ++”的方式來實現您想要的是:
void createArray( std::vector<std::string>& dict );
和簡單有createArray
調整vector
到所需的大小。 使用vector
和string
類的標准容器還可以使您免於顯式地取消分配所分配的內存的義務,該內存當前在代碼中丟失。
有兩個錯誤。
刪除數組:
char **array = /* new with whatever */; /* do your work */ for (i = 0; i < array_size; ++i) delete[] array[i]; delete[] array;
要新建一個數組:
char **array = new char *[array_size]; for (i = 0; i < array_size; ++i) array[i] = new char[array_size_2];
delete
ing時,要確保您不遍歷一個不是new
ed數組,請針對NULL
檢查:
for (i = 0; i < array_size; ++i) { if (array[i] != NULL) /* Or simply if (array[i]) */ delete[] array[i]; array[i] = NULL; } if (array != NULL) delete[] array; array = NULL;
另外,由於delete
仍然會檢查NULL
,因此您可以將其簡化為:
if (array != NULL) for (i = 0; i < array_size; ++i) delete[] array[i]; /* no need to set to NULL after if going to delete the array */ delete[] array; array = NULL;
注意: delete
刪除單個對象,而delete[]
刪除數組。
我無法想象如何處理此類數據,但您至少可以使用現代技術。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> create() {
vector<string> result;
for (char i = 'A'; i <= 'Z'; ++i) {
for (char j = 'A'; j <= 'Z'; ++j) {
for (char k = 'A'; k <= 'Z'; ++k) {
for (char l = 'A'; l <= 'Z'; ++l) {
result.push_back(string() + i + j + k + l);
}
}
}
}
return result;
}
int main() {
vector<string> data = create();
cout << data.front() << endl << data.back() << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.