2016-11-20 39 views
0

我宣稱int star = new int;,我把這個值放在star。例如:C++如何從動態分配獲取數組大小?

int *star = new int; 
int i,j = 0; 
for (i = 0; i < length; i++) 
{ 
    if(words[i] == '*') 
    { 
     star[j] = i; 
     j++; 
    } 
} 

現在我想知道star的大小。我試過sizeof()_msize()但他們不工作,他們只是讀取類型的大小。

+0

將代碼粘貼到此處,而不是圖像。 – abdul

+2

'星號'不是一個數組。 – 0x499602D2

回答

0

star是一個指向單個整數的指針。所以length應該是1,由您來設置它。 star[0]沒問題,但star[1]會超出範圍。順便說一下,當你使用動態分配時,不要忘記在最後delete star;

sizeof(star)會給你指針的大小,而不是分配給元素的數量。

如果你想知道動態的大小,你必須自己來跟蹤它:

size_t length = 15;   // or any number you want 
int *star = new int[length]; // this time you've allocated an array 
... 
delete[] star;    // if you allocate an array, don't forget the [] 

另一種方法是使用vector<int>這是完全動態的,可以長按需要,並照顧釋放時,不再需要他們:

vector<int> star; // empty vector created 
    ... 
     star.push_back(i); // add an element 
    ... 
    j=star.size(); // in fact you don't need j anymore 

您可以訪問成員正是因爲使用數組(如star[k])

+0

沒有人知道長度是多長。如果輸入是3,那麼大小是3.這就是我想要的像C中的malloc。我想要使用該函數,然後使用向量? –

+0

@이상훈矢量將更容易(見編輯) – Christophe

0

ÿ你還沒有將星號聲明爲數組,而是將其作爲一個整數。如果要找出'*'在文件中出現的次數,則應該創建一個整數int count = 0並且每次執行count++;word[i] == '*'

+0

然後我使用什麼樣的功能?我想要像C中的malloc一樣的效果。 –

+0

我這樣做。我想知道如何使用動態分配。 –