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

Указатель на массив - C++

Восстановить пароль Регистрация
 
Kression
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 34
10.07.2015, 18:59     Указатель на массив #1
Не могу разобраться в указателях. Допустим есть двумерный массив, выводятся поочереди 19 элементов. Если я в инструкции if поменяю *numbers[0][0]++; на *numbers[1][0]++; то у меня выводится 19 раз буква Т. Ведь поидее адрес теперь начинается со 2й строчки, и должна сначало высветиться буква Т, а потом часть строки "qwertyttttttttttttttttttttttttttttttttttttttttttt". Почему так происходит?

Как получить доступ через указатель сразу например к 19 элементу? В одмерном массиве получалось прибавить число к указателю и он менял адрес, а в двумерном пишет ошибку.

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    int i;
    
    char *numbers [2][2]={
         "Tom" , 
         "555-2345",
         "qwertyttttttttttttttttttttttttttttttttttttttttttt",
         };
         
         for(i=0;i<19;i++) {
                           cout << *numbers[0][0] << '\n';
                           *numbers[0][0]++;
}
    
cout << '\n' ;
system("pause");
return 0;
}


И еще, функция rand() всегда генерирует одни и теже числа, как почистить память, что бы другие перезаписались?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,623
10.07.2015, 19:23     Указатель на массив #2
Судя по содержимому должно быть так:
C++
1
2
3
4
5
     char *numbers[3]={
         "Tom" , 
         "555-2345",
         "qwertyttttttttttttttttttttttttttttttttttttttttttt",
         };
Соответственно, numbers[0] - это "Tom", numbers[0][2] - 'm'.

Для rand() однократно:
C++
1
srand(time(NULL));
Kression
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 34
10.07.2015, 19:42  [ТС]     Указатель на массив #3
nmcf, такая запись годиться если задан не указатель, а просто массив.А я не могу понять работу именно указателя
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,623
10.07.2015, 22:04     Указатель на массив #4
Ты сначала со структурой данных разберись. Если не нужен массив, не создавай массив.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
11.07.2015, 10:27     Указатель на массив #5
Цитата Сообщение от Kression Посмотреть сообщение
Не могу разобраться в указателях
разбирайтесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
 
int main() {
    char *array[3] = {
        "Tom" , 
        "555-2345",
        "qwertyttttttttttttttttttttttttttttttttttttttttttt"
    };
    
    for (size_t i = 0; i < 3; i++) {
        char **ptrRow = (array + i);
        while (**ptrRow) {
            std::cout << **ptrRow;
            *(++*ptrRow);
        }
        std::cout << std::endl;
    }
         
    return 0;
}
Цитата Сообщение от Kression Посмотреть сообщение
Как получить доступ через указатель сразу например к 19 элементу?
C++
1
std::cout << *(*(array + 2) + 19) << std::endl;
соответственно, где:
2 - номер строки, к которой нужно обратиться
19 - номер элемента данной строки
ящюр
65 / 65 / 10
Регистрация: 15.03.2013
Сообщений: 397
Записей в блоге: 1
11.07.2015, 11:14     Указатель на массив #6
И еще, функция rand() всегда генерирует одни и теже числа, как почистить память, что бы другие перезаписались?
C++
1
srand(time(0));
выполняет инициализацию генератора случайных чисел.
....
C++
1
int k=rand()%(Maximum-Minimum)+Minimum
Задает диапазон от Minimum до Maximum.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
11.07.2015, 12:13     Указатель на массив #7
Цитата Сообщение от ящюр Посмотреть сообщение
C++
1
int k=rand()%(Maximum-Minimum)+Minimum
по-моему
C++
1
int k=rand()%(Maximum-Minimum + 1) + Minimum
а еще проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <random>
#include <ctime>
 
int main() 
{
    std::default_random_engine random (std::time(nullptr));
    std::uniform_int_distribution <> distribution (-20, 20);
    
    for (size_t i = 0; i < 10; i++) {
        int number = distribution(random);
        std::cout << number << ' ';
    }
    
    return 0;
}
ящюр
65 / 65 / 10
Регистрация: 15.03.2013
Сообщений: 397
Записей в блоге: 1
11.07.2015, 13:04     Указатель на массив #8
Да, вы правы...
C++
1
int k=rand()%(Maximum-Minimum + 1) + Minimum
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 13:20     Указатель на массив
Еще ссылки по теме:

Указатель на массив C++
Указатель на массив C++
C++ Массив и указатель

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

Или воспользуйтесь поиском по форуму:
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,623
11.07.2015, 13:20     Указатель на массив #9
Использование остатка от деления с rand() нарушает равномерное распределение.
Лучше <random> как предложили выше.
Yandex
Объявления
11.07.2015, 13:20     Указатель на массив
Ответ Создать тему
Опции темы

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