2014-10-25 12 views
0

Мне нужно понять, как манипулировать данными в разных позициях индекса в динамически выделенном массиве символов в C++. Я делаю quack (queue/stack). Меня интересует переменная «элементы».Как ссылаться на динамически выделенный массив символов в C++

Вот определение класса Quack:

class Quack 
{ 
public: 
    static const char YOUR_NAME[];  // used for printing out programmer's name 
    static const bool PREMIUM_VERSION; // used to designate Regular vs. Premium 

    Quack(int capacity, int growBy = 0); 
     // capacity: # of slots in array 
     // growBy: # of slots to add to array when it grows, 0 means "don't grow" 
    ~Quack(void); 
    bool pushFront(const char ch);  // push an item onto the front 
    bool pushBack(const char ch);  // push an item onto the back 
    bool popFront(char& ch);   // pop an item off the front 
    bool popBack(char& ch);    // pop an item off the back 
    void rotate(int r);     // "rotate" the stored items (see note below) 
    void reverse(void);     // reverse the order of the stored items 
    int itemCount(void);    // return the current number of stored items 

    void printArray(std::ostream& out)     // print contents of array 
    { 
     unsigned int ch; 

     out << "[ "; 
     for (int i = 0; i < capacity; i++) { 
      ch = static_cast<unsigned char>(items[i]); // avoid sign extension 
      if (ch == '-')        // print in hex, because using '-' for 0xCD 
       goto printHex; 
      else if (ch >= '!' && ch <= '}')   // ASCII text character 
       out << static_cast<char>(ch) << ' '; 
      else if (ch == 0xCD)      // print 0xCD as '-' 
       out << "- "; 
      else          // print everything else as hex 
       goto printHex; 
      continue; 

     printHex: 
      out << std::setw(2) << std::setfill('0') << std::hex << ch << ' '; 
      } 
     out << ']' << std::endl; 
    } 

private: 
    char *items;      
    int  nItems;      
    int  capacity;     
    int  growBy; 
    int  *front; 
    int  *back; 

public: 
    friend std::ostream& operator<<(std::ostream& out, Quack *q); 
}; 

Теперь, вот конструктор Кряк:

Quack::Quack(int capacity, int growBy) : 
    capacity(capacity), 
    growBy(growBy), 
    nItems(0), 
    items(new char[capacity]), 
    front(NULL), 
    back(NULL) 
{ 
} 

Я понимаю, что каждый экземпляр Quack имеет переменную обугленного «элементы», который является указатель на новый массив символов. Я не понимаю, как ссылаться на элементы в массиве. Например, если я хочу ссылаться на позицию индекса 0 нового массива символов, могу ли я указать элементы (0) или элементы [0], или это что-то совсем другое?

Спасибо

+0

пунктов [0]. items (new char [capacity]) является просто синтаксисом для создания массива, например nItems (0) делает nItems = 0 – user3125280

+0

'goto printHex;' Arrggh! Пожалуйста, сделайте это вместо: 'if (ch == '-') PrintHex (out, ch);' – PaulMcKenzie

ответ

0

Как вы правильно поняли, items это массив символов, и каждый экземпляр Quack имеет свою собственную переменную items. Доступ к динамически распределенному массиву и статически выделенному массиву одинаковый. Они выделяются в смежных местах памяти.

char arr[24]; // Allocate 24 bytes in contiguous memory locations in stack 
char* arr = new char[24]; //Allocate 24 bytes in contiguous memory locations 
          // in heap 

Вы можете получить доступ к переменной в любом из следующих способов:

1. Quack q; 
    cout << q.items << endl; //Print the char array 
    cout << q.items[1] << endl; // Print the second index position of items 

2. Quack* qptr = new Quack(); 
    cout << q->items << endl; //Print the char array 
    cout << q->items[1] << endl; // Print the second index position of items 
+0

Первое положение индекса - индекс [0]. –

Смежные вопросы