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

Ссылки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить количество нечетных положительных элементов с четными номерами http://www.cyberforum.ru/cpp-beginners/thread200672.html
Добрый вечер! Вот код программы.Почему то он не считает количество.Всегда выводит 1.Помогите,пожалуйста что бы считал нормально.Спасибо. #include <vcl.h> #pragma hdrstop #pragma argsused #include...
C++ Нужна практика Дайте пожалуста 3 задачи по С++, а точнее по "Перезагрузка операций". Учюсь вот по этой книжке "Обьектно-Ориентированное Программирование в С++", Автор: Р.Лафоре. В конце каждой главы есть... http://www.cyberforum.ru/cpp-beginners/thread200664.html
endl необъявленный идентификатор C++
Почему компилятор использует endl, как переменную, а не переход на новую строку? endl необъявленный идентификатор
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++ блок-схема http://www.cyberforum.ru/cpp-beginners/thread200624.html
#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 ");...
C++ Необходимо изменить строку так, чтобы длина строки стала равна заданной длине Дана строка текста, в котором нет начальных и конечных пробелов. Необходимо изменить её так, чтобы длина строки стала равна заданной длине (проверить: текущая длина должна быть меньше заданной!).... подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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;
     }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru