Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

Доступ к элементу массива через указатель - C++

17.09.2012, 12:50. Просмотров 2361. Ответов 4
Метки нет (Все метки)

надо осушествить следуюшие: pointerArr[0]=21;
когда:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <QtCore/QCoreApplication>
#include "Array.h"
#include "ProtectedArray.h"
#include <string>
using namespace MaxonArrayNamespace;
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    int temp[]={10,21,15,4};
    Array<int> intArr(temp,4);
    Array<int> *pointerArr=new Array<int>(temp,4);
    intArr.show();
    pointerArr->show();
    intArr[0]=21;
    pointerArr[0]=21;
    intArr.show();
    pointerArr->show();
    return app.exec();
}
array.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using namespace std;
namespace MaxonArrayNamespace{
template<class type>
class Array
{
public:
    Array(int sz=0)
    {
        init(0,sz);
    }
    Array(type *a,int sz)
    {
        init(a,sz);
    }
 
    Array(Array *a)
    {
        init(a,a->Size());
    }
    type Size()
    {
        return size;
    }
    ~Array()
    {
        delete[] arr;
    }
    void show()
    {
        cout<<"This-"<<(this)<<"  cout="<<size<<" size="<<sizeof(type)*size<<"bytes"<<endl;
        for(int i=0;i<size;i++)
        {
            cout<<arr[i]<<" ";
        }
        cout<<endl;
    }
    type& operator[](int i)
    {
        return arr[i];
    }
    bool operator ==(Array *a);
    bool operator !=(Array *a);
 
    Array* operator =(Array *a)
    {
        return a;
    }
    type find(type val);
 
protected:
    void init(type *a,int sz)
    {
        size=sz;
        arr=new type[size];
        for(int i=0;i<size;i++)
        {
            if(!a)
            {
                arr[i]=type();
            }
            else
            {
                arr[i]=a[i];
            }
        }
    }
 
    int size;
    type *arr;
};
}
#endif // ARRAY_H
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к элементу массива через указатель (C++):

Доступ к элементу std::string через указатель - C++
Подскажите как получить содержимое элемента currentVal через указатель? Через простую нотацию массивов не получается:( std::string...

Доступ к элементу вектора строк через геттер - C++
Привет, у меня есть примерно такой класс: class person { private: std::vector&lt;std::string&gt; criterias; public: //.... ...

Как сделать доступ через указатель? - C++
Всем привет. Нужна помощь. Нужно вектору объектов в одном классе сделать указатель и получить доступ к его содержимому. Вот код: ...

Обеспечить доступ к индексатору через указатель - C++
map&lt;int,int&gt; * m = new map&lt;int,int&gt;(); m = 5; //так можно m-&gt; = 5; //так нет (m-&gt;) = 5;//так нет как сделать доступ к...

Доступ к элементам структуры через указатель на структуру - C++
Как делается доступ к элементам структуры через указатель на структуру. Вроде же через -&gt;но тогда почему тут делается по другому: struct...

Разный доступ к элементам структуры через указатель - C++
Всем добрый вечер! Есть структура и два указателя на структуру. Первый указатель выделяет память для единичного значения а второй для...

4
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,579
17.09.2012, 13:00 #2
и что? нет доступа? в чем проблема?
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.09.2012, 15:16  [ТС] #3
проблема в том что если пишим допустим pointerArr[3]=21 он загоняет в память в позцию смещённую на 3*величены размера указателя 21. тогда ничего не происходит. если мы пишем допустим pointerArr[0]=21; он меняет само значение указателя на 21. и после этого указатель указывает фиг пойми куда

Добавлено через 1 минуту
попробуйте компильнуть увидете результат

Добавлено через 2 часа 3 минуты
со стандартным вектором проблема та же, он не разрешает обращяться к элементу по индексу
C++
1
2
3
4
5
    vector<int> *pVec=new vector<int>();
    pVec->push_back(2);
    pVec->push_back(3);
    pVec[1]=21;
    cout<<pVec[1]<<endl;
но тут немного веселей, ошибка типа
E:\Qt\Lessons\array\main.cpp:37: error: no match for 'operator=' in '*(pVec + 12u) = 21'
и в последней строчке
E:\Qt\Lessons\array\main.cpp:38: error: no match for 'operator<<' in 'std::cout << *(pVec + 12u)'

Добавлено через 2 минуты
интересно что если создаёшь обьект как
C++
1
2
3
4
5
    vector<int> intVec;
    intVec.push_back(2);
    intVec.push_back(3);
    intVec[1]=21;
    cout<<intVec[1]<<endl;
всё работает
0
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,579
17.09.2012, 18:42 #4
делайте
C++
1
(*pointerArr)[0]=21;
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.09.2012, 12:39  [ТС] #5
спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 12:39
Привет! Вот еще темы с ответами:

Доступ к элементам структуры через указатель на структуру - C++
Не могу понять, где ошибка... В файле информация о двух людях. В конечном итоге заносит в структуру имя и фамилию второго человека, а...

Обращение к элементу массива через адрес - C++
#include &quot;a.h&quot; #include &lt;iostream&gt; #include&lt;stdio.h&gt; using namespace std; void vvod(float mas,int n); void calc(float...

Вывод массива через указатель - C++
Небольшой набросок, есть функция, вычисляющая значения произвольного выражения. Эти значения потом скидываются в массив. Хочу возвратить...

Передача массива через указатель - C++
Надо передать массив в функцию через указатель, я сделал, так но что то программа долго думаете #include &lt;iostream&gt; #include ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
18.09.2012, 12:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru