Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

извращения с указателями и массивами :)

9.3K
07 ноября 2005 года
ALLCALL
19 / / 07.11.2005
у меня есть двухмерный массив int mas[a]; я хочу получать элементы этого массива посредством такой штуки:
for (int i=0;i<a*b;i++)
{
printf(" %d",*((int)mas[0]+i*24));
}
ругаеться(error C2100: illegal indirection) на (int), но без него выдаються какие-то дикие указатели :(
кто знает как можно сделать? вариант mas[f1(i)][f2(i)] - неинтересен
406
07 ноября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by ALLCALL
у меня есть двухмерный массив int mas[a]; я хочу получать элементы этого массива посредством такой штуки:
for (int i=0;i<a*b;i++)
{
printf(" %d",*((int)mas[0]+i*24));
}
ругаеться(error C2100: illegal indirection) на (int), но без него выдаються какие-то дикие указатели :(
кто знает как можно сделать? вариант mas[f1(i)][f2(i)] - неинтересен




for (int i=0;i<a*b;i++) {
printf(" %d",*(&mas[0][0]+i));
}

398
07 ноября 2005 года
Alexandoros
630 / / 21.10.2005
for (int i=0;i<a*b;i++) {
printf(" %d",*(mas+i));
}
9.3K
07 ноября 2005 года
ALLCALL
19 / / 07.11.2005
Цитата:
Originally posted by vitaly2003s
for (int i=0;i<a*b;i++) {
printf(" %d",*(&mas[0][0]+i));
}


Работает! :)
только я не понимаю почему i интерпретируется как размер типа int, а не как число 1,2,3,4



Цитата:
Originally posted by Alexandoros
for (int i=0;i<a*b;i++) {
printf(" %d",*(mas+i));
}


не работает :(

398
07 ноября 2005 года
Alexandoros
630 / / 21.10.2005
угу, ашипся
for (int i=0;i<a*b;i++) {
printf(" %d",printf(" %d", *(reinterpret_cast<int*>(mas) + i) ));
}
9.3K
07 ноября 2005 года
ALLCALL
19 / / 07.11.2005
2 Alexandoros и vitaly2003s
Спасибо :)
только у меня еще вопрос появился
как получить доступ к элементу структуры, если эти жлементы находяться в таком-же массиве?

struct dot
{
int type;
int value;
};
dot mas[a];

если использовать *(&(mas[0][0])+i),например
выдаеться только один элемент, а другой нет :(
398
07 ноября 2005 года
Alexandoros
630 / / 21.10.2005
Код:
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 10; int b = 10;
    int i, j, k;

    class Dot
    {
    public:
        int type;
        int value;
    };

    Dot mas[10][10];

    for(i = 0; i < a; i++  )
        for(j = 0; j < b; j++)
        {
            mas[j].type = i*a + j;
            mas[j].value = 200 + i*a + j;
        }

    for (i = 0; i < a*b; i++)
    {
        k = *(reinterpret_cast<int*>(mas) + i * sizeof(Dot) /sizeof(int)  );
        printf(" %d", k );
        k = *(reinterpret_cast<int*>(mas) + i * sizeof(Dot) /sizeof(int) + 1  );
        printf(" %d", k );
    }

    return 0;
}
3
07 ноября 2005 года
Green
4.8K / / 20.01.2000
Хм...
Мне кажется, что вопрос имеет следующий смысл: "Как не использовать ООП, при использовании ООП".
Ответ: либо не использовать ООП, либо научится использовать ООП.

Могу порекомендовать лишь касательно второй части ответа.
Узнай, что такое итератор и научись его применять.
Это совсем несложно, но очень удобно.
351
08 ноября 2005 года
PitxBull
633 / / 22.12.2004
Цитата:
Originally posted by Green
Хм...
Мне кажется, что вопрос имеет следующий смысл: "Как не использовать ООП, при использовании ООП".
Ответ: либо не использовать ООП, либо научится использовать ООП.

Могу порекомендовать лишь касательно второй части ответа.
Узнай, что такое итератор и научись его применять.
Это совсем несложно, но очень удобно.



Поддерживаю :). Сча они начнут доказывать что чистый C быстрее ;).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог