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

Ссылки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна практика http://www.cyberforum.ru/cpp-beginners/thread200664.html
Дайте пожалуста 3 задачи по С++, а точнее по "Перезагрузка операций". Учюсь вот по этой книжке "Обьектно-Ориентированное Программирование в С++", Автор: Р.Лафоре. В конце каждой главы есть упражнения, но проблема в том что упражнения в этой(Перезагрузка операций) главе, строятся на упражнениях из предыдуших глав, а из-за недавней переустановки системы, все мои наработки слетели к чёртовой...
C++ endl необъявленный идентификатор Почему компилятор использует endl, как переменную, а не переход на новую строку? endl необъявленный идентификатор http://www.cyberforum.ru/cpp-beginners/thread200661.html
C++ Отредактировать
#include <iostream> using namespace std; int a; int n; const bool abba(const int x, const int y, const int beatls) { if(y > 0 && a < a)
C++ блок-схема
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { int i,j,k,m,n,temp; int** Array; /*создаем матрицу с помощью указателей */ printf("Enter number of strings:\n "); /*пользователь задает кол-во строк и столбцов */ scanf("%d", &n); printf("Enter number of columns:\n ");
C++ Необходимо изменить строку так, чтобы длина строки стала равна заданной длине http://www.cyberforum.ru/cpp-beginners/thread200618.html
Дана строка текста, в котором нет начальных и конечных пробелов. Необходимо изменить её так, чтобы длина строки стала равна заданной длине (проверить: текущая длина должна быть меньше заданной!). Изменение следует сделать путем вставки между словами дополнительных пробелов. Количество пробелов между отдельными словами должно отличаться не более чем на 1. p.s. подскажите как делать?
C++ MD5 Приветствую Вас друзья! Кто знает напишите кодировщика MD5 на С++. подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
30.11.2010, 16:43     Ссылки
Цитата Сообщение от 4ance Посмотреть сообщение
Правильно ли это?
Нет, неправильно.
Вы немного не понимаете суть массивов в Си. Как такового объекта "массив" в языке не существует. Есть область памяти, в которую последовательно записаны данные одного типа.

То есть массив вида int array[5] - это участок памяти размером 5 * sizeof(int). Это просто область памяти и ничего больше. Следовательно абсолютно неважно каким типом данных ее представлять. То есть я могу создать массив из 5 объектов типа int, а считать из него 20 объектов типа char (при условии что sizeof(int) == 4) && sizeof(char) == 1);

Ну а так как объекта массив не существует, то и сравнивать их нельзя. То есть нельзя писать:
C
1
2
3
4
5
int a[5];
int b[5];
// ...
if(a == b)
//...
Для работы с массивами в языке существуют указатели. Когда массив передается в функцию, то фактически в функцию передается указатель на массив, а если быть еще более точным то указатель на первый элемент массива.
При выделении области памяти динамически (new, malloc, realloc) указателю также присваивается адрес первого элемента массива.

Теперь обогатившись некоторыми знаниями посмотрим на конкретный код, то есть Ваш и то что Вы хотели бы с ним сделать.

C++
1
2
3
int **m=new int*[h]; 
for (int i=0;i<h;i++)
 m[i]=new int[h];
Здесь int **m - это двойной указатель (или указатель на указатель), с помощью операции new int*[h] этому указателю присваивается адрес первого элемента из массива указателей.
далее в цикле, каждому элементу из массива указателей присваивается адрес первой переменной из массива типа int.

Тогда получается, что выражение *m[ i ] == *m[ i + 1 ] будет аналогично выражению m[i][0] == m[i + 1][0]. То есть сравниваться будут только первые элементы i-ой и следующей строки.

Вывод: Сравнивать строки и столбцы надо поэлементно в цикле.
C++
1
2
3
4
5
6
7
bool eq = true;
for(int j = 0; j < h; ++j) {
     if(m[i][j] != m[i+1][j]) {
           eq = false;
           break;
     }
}
 
Текущее время: 20:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru