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

Набор слов, заданый массивом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сколь угодно большое целое число http://www.cyberforum.ru/cpp-beginners/thread6247.html
Задача: реализовать обьект lint - сколь угодно большое целое число (знаковое). Необходимо перегрузить все основные операторы (сложение, вычитание, умножение, деление) + осуществить возможность вывода в разных системах счисления. Может быть кто-то уже сталкивался с подобной задачей или у кого-нибудь есть какие-то оптимальные идеи? Я - начинающий программист С++, но, честно говоря, не хотел бы...
C++ Досрочный выход из программы Добрый день! Имеется программа на Borland С, нажимаю на фоме кнопку и запускаю расчет. Расчет производится в функции нажатия на кнопку. Если я хочу остановить программу, то это можно сделать только из "Диспетчера задач". Виндоусовский крестик в правом верхнем углу не помагает. Как можно остановить программу во время вычислений не из "Диспетчера задач"? Спасибо http://www.cyberforum.ru/cpp-beginners/thread6239.html
C++ Вопрос
Такая задача возникла... Есть класс например: class tempClass { public: const int size; tempClass(){size=100;} };
Срочно помогите пожалуста перевести ее с JAVA на С++код внут C++
помогите написать такую прогу ..здавать уже через 4 дня. (пишу в visualStudio) Я только начинаю осваивать С++. до этого пару месяцев изучал java и на java уже писал такую программу//она внизу// помогите пожалуста перевести ее с JAVA на С++ - написать нужно именно с vector или двойной array, а то что то с vector вообще разобраться немогу. Заранее большое большое спасибо!!!! Write...
C++ работа с файлами http://www.cyberforum.ru/cpp-beginners/thread6175.html
Скопировать из одного файла в другой последовательность строк, заданных начальным и конечным порядковыми номерами от начала файла. На экран вывести количество скопированных символов букв и число скопированных слов, являющихся ПАЛИНДРО*МАМИ. Если кто забыл ПАЛИНДРОМ – это слово, в котором символы при просмотре слева направо и справа налево совпадают. PS Мне в основном нужна помощь с выводом...
C++ Как измерить время Здравствуйте! В программе на С(Borland С) необходимо знать, за какое время выполняется программа. Т.е. открывает программу, нажимаем кнопку Страт и выполняется код, кодда код выполнен, надо узнать сколько времени прошло с момента нажатия на кнопку Старт Пожалуйста, приведите примеры на С Спасибо подробнее

Показать сообщение отдельно
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
02.03.2008, 15:07
Объясняю популярно, хотя в любой книге это популярно описано, ну что ж, надеюсь мой пост внимут многие, кому непонятна многочисленная возня с указателями.

Код
char *word[] = {"one", "two", "three"};
Объявление массива из трёх указателей каждый из которых указывает на элемент типа char. Инициализация: каждый указатель теперь указывает на массив символов. Теперь ситуация обстоит так:

Код
char *word[0] = "one";
char *word[1] = "two";
char *word[2] = "three";
Строки расположились в секции rodata, посему попытка изменения содержимого памяти по данным указателям приведёт к access violation. Поэтому безопаснее было объявить так

Код
const char *word[] = {"one", "two", "three"};
дабы компилятор уберёг нас от возможности изменения этих данных. Но ближе к сути. Если мы объявляем массив

Код
char arr[LEN];
компилятор автоматически резервирует память для LEN элементов типа char на стеке(локальная память). Любое обращение к имени arr в программе преобразуется в указатель на первый элемент массива. Поэтому теперь изменить содержимое последней ячейки массива мы можем как так

Код
arr[LEN - 1] = 'x';
так и так

Код
*(arr + LEN - 1) = 'x';
Однако мы могли бы вначале сделать такое объявление:

Код
char *arr = "abcdefgh";
Это объявление создаст локальный указатель, который будет указывать на показанную строку, которую компилятор опять же разместит в секции rodata(обратите внимание - в первом случае массив полностью разместится на стёке). Изменить последний элемент массива мы опять же можем как так

Код
arr[LEN - 1] = 'x';
так и так

Код
*(arr + (LEN - 1)) = 'x';
Предполагается, что в данном случае LEN известно: либо задано как константа, либо вычислено в программе. Поскольку количество элементов строки нигде явно не декларируется, можно их посчитать(как - думаем сами).

Таким образом, теперь мы видим, что

Код
arr == &arr[0];
*arr == arr[0];
*(arr + N)) == arr[N];
arr + N == &arr[N];
Обратите внимание, что прибавление к указателю единицы заставляет указатель указывать на следующий элемент указуемого массива(но не на следующий байт).

Это было теоретическое вступление. Теперь ближе к самому вопросу. Поскольку известно что strncmp имеет такой прототип

Код
int strncmp(const char *s1, const char *s2, size_t n);
из всего вышесказанного д/б понятно, что такой вызов невалиден

Код
strncmp (p[i], p[i+1], 1)
поскольку это эквивалентно
Код
strncmp (*(p + i), *(p + i + 1), 1)
т.е. ты передаёшь функции не указатели, а сами элементы массивов, в то время как правильный вызов должен выглядеть так

Код
strncmp (p + i, p + i + 1, 1)
Надеюсь всё ясно.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru