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

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

Войти
Регистрация
Восстановить пароль
 
Kression
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 37
#1

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

10.07.2015, 18:59. Просмотров 320. Ответов 8
Метки нет (Все метки)

Не могу разобраться в указателях. Допустим есть двумерный массив, выводятся поочереди 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() всегда генерирует одни и теже числа, как почистить память, что бы другие перезаписались?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 18:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на массив (C++):

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. - C++
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции, каждая из которых принимает указатель на...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Динамический массив и указатель на указатель - C++
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5312 / 4632 / 1550
Регистрация: 14.04.2014
Сообщений: 18,440
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
Сообщений: 37
10.07.2015, 19:42  [ТС] #3
nmcf, такая запись годиться если задан не указатель, а просто массив.А я не могу понять работу именно указателя
nmcf
5312 / 4632 / 1550
Регистрация: 14.04.2014
Сообщений: 18,440
10.07.2015, 22:04 #4
Ты сначала со структурой данных разберись. Если не нужен массив, не создавай массив.
Ev[G]eN
Эксперт С++
5097 / 1535 / 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 - номер элемента данной строки
ящюр
97 / 97 / 24
Регистрация: 15.03.2013
Сообщений: 520
Записей в блоге: 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
Эксперт С++
5097 / 1535 / 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;
}
ящюр
97 / 97 / 24
Регистрация: 15.03.2013
Сообщений: 520
Записей в блоге: 1
11.07.2015, 13:04 #8
Да, вы правы...
C++
1
int k=rand()%(Maximum-Minimum + 1) + Minimum
nmcf
5312 / 4632 / 1550
Регистрация: 14.04.2014
Сообщений: 18,440
11.07.2015, 13:20 #9
Использование остатка от деления с rand() нарушает равномерное распределение.
Лучше <random> как предложили выше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 13:20
Привет! Вот еще темы с ответами:

указатель на массив - C++
Добрый день, объясните как верно будет. например определим массив char array = {&quot;qaqaqaqqa&quot;} к примеру есть функция void primer(...

указатель и массив - C++
подскажите плс эти две строки эквивалентны? char* str=&quot;bla bla bla&quot;; char str={&quot;bla bla bla&quot;}; Почему при выводе адреса 1...

Указатель на массив - C++
Подскажите пожалуйста, как создать указатель на массив, если длина массива записана в переменной? Т.е проблема в том что в квадратных...

Указатель на массив - C++
Есть такая структура struct Elem { char cos; Elem * next; Elem * prev; }; Elem * Head=NULL,*Tail=NULL;


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

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

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