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

Массив: каким образом можно изменить размер многомерного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввести x,y и в зависимости от того что введено - вывести 0 , 1 , или 2 http://www.cyberforum.ru/cpp-beginners/thread819289.html
Помогите сделать задачку...в зависимости какой будет х и y выводится на екран число. Я думал мб вот так, но не получается, выводит постоянно 1 и 2: #include <iostream.h> #include <conio.h> ...
C++ Создание дерева Возникли трудности при создании дерева. Ниже предоставил свои наработки, но как доделать не могу понять. Помогите разобраться. #include <stdio.h> #include <Windows.h> #include <time.h> ... http://www.cyberforum.ru/cpp-beginners/thread819287.html
C++ Список. Дописать в начало элементы, которые входят в L1, но не входят в L2...
Cформировать список L из элементов, которые входят одновременно в списки L1 и L2. Дописать в начало элементы, которые входят в L1, но не входят в L2, а в конец - элементы, которые входят в L2, но не...
Открытие файлов через консоль C++
возможно ли открыть через консоль текстовый файл в формате док чтобы его содержимое не на консоль вывело а через ворд обычно открыло??
C++ загрузить в програму изображения формата jpg и получить доступ к каждому пискселю http://www.cyberforum.ru/cpp-beginners/thread819278.html
Весь вопрос в заголовке темы) надеюсь что подскажеет в какую сторну копать)
C++ Ошибка в преобразованиях двумерного массива (для решения СЛАУ) Пишу прогу которая решает уравнение методом простых итераций,не дойдя собственно до самого метода обнаружил ошибку, при преобразовании матрицы по диагонали должны нули быть,но их почему то нет,в чем... подробнее

Показать сообщение отдельно
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.03.2013, 20:02
kravam, двумерный массив в C\С++, имеет ту же структуру, что и одномерный, т.е. все элементы в нём расположены последовательно друг за другом. Проверить это можно с помощью следующего примера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    const int m = 3;
    const int n = 4;
 
    int a[m][n] =
    {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9 ,10, 11, 12}
    };
 
    int* p = (int*) a;
 
    const int len = (m * n);
    for(int i = 0; i < len ; ++i)
        std::cout << p[i] << ' ';
    std::cout << '\n';
}
в двумерный он превращается с помощью простой формулы i * n + j
C++
1
2
3
4
5
6
7
8
9
for(int i = 0; i < m ; ++i)
{
    for(int j = 0; j < n ; ++j)
    {
        std::cout.width(4);
        std::cout << p[i * n + j];
    }
    std::cout << '\n';
}
Нельзя приводить имя массива, которое по сути является адресом его первого элемента, к указателю на указатель(типу предназначенному для хранение адресов других указателей), а затем пытаться его разыменовать.
C++
1
2
3
4
5
int a[m][n];
int* p1 = (int*) a;
int** p2 = (int**) a;
p1[0]; // Первый элемент массива
p2[0]; // Указатель, который в качестве адреса хранит значение первого элемента массива...
Думаю не нужно объяснять, что произойдёт, при попытке разыменования p2[0]
C++
1
p2[0][0]; // берём значение по адресу p2[0], в то время как "адрес", это число являющееся первым элементом массива(!)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru