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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.09.2012, 12:50     Доступ к элементу массива через указатель #1
надо осушествить следуюшие: 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,236
17.09.2012, 13:00     Доступ к элементу массива через указатель #2
и что? нет доступа? в чем проблема?
maxon887
 Аватар для 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;
всё работает
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,236
17.09.2012, 18:42     Доступ к элементу массива через указатель #4
делайте
C++
1
(*pointerArr)[0]=21;
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.09.2012, 12:39  [ТС]     Доступ к элементу массива через указатель #5
спасибо
Yandex
Объявления
18.09.2012, 12:39     Доступ к элементу массива через указатель
Ответ Создать тему
Опции темы

Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru