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

работа с указателями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ поиск маршрута. Задача на С#. http://www.cyberforum.ru/cpp-beginners/thread33222.html
Задача следующая: Некая географическая карта местности задана квадратной сеткой определенного масштаба. В узлах сетки известна высота над уровнем моря. Между соседними узлами высота меняется плавно. Имеется караван, перемещающийся только по линиям сетки, перемещение по диагоналям запрещается. Путь между двумя соседними точками с углом наклона больше 45 градусов считается непроходимым....
C++ Обработка русского текста в консольном режиме. Приветствую всех, Собственно вопрос: Создаю строковую переменную, посредством cin заношу в неё текст на русском, распечатываю cout'ом и получаю хлам. Типа ввоже йцукен, получаю ©жгЄҐ* В принципе, я могу перед выводом на экран у каждого символа "сдвинуть" кодировку, но может есть более простой способ? Заранее благодарен. http://www.cyberforum.ru/cpp-beginners/thread33212.html
Курсач на С++(должен был сдать месяц назад!!(((() C++
1.Известно, что в Москве самыми теплыми являются дни с 15 июля по 15 августа. Для проведения фестиваля были выбраны 7 следующих подряд дней, наиболее теплых по данным за последние 10 лет. Составить программу для выполнения этой работы на ЭВМ. (Все данные датчиком случайных чисел.) 2.Японская радиокомпания провела опрос 250 радиослушателей по трем вопросам: 1). Какое животное Вы связываете с...
C++ Автокорреляция
Ув. форумчани напишите пожалуйста код на С++ Builder функцию автокорреляции или как по др. преобразование Фурье 2D.
C++ текстовый файл http://www.cyberforum.ru/cpp-beginners/thread33205.html
поскажите пожалуйста почему не работает. хочу написать первые символы строк если они удовлетворяют условию в конец того же файла из которого они считываются. if ((newfile = fopen(name, "a+")) != NULL) while (fgets (buffer,30,newfile)!=0){ if (buffer>47&&buffer<57) {fprintf(newfile,"%c ",buffer);} } Добавлено через 14 минут 0 секунд или как вообще считать строку, как-то...
C++ Какие виды сортировки бывают Какие виды сортироыуи бывают на с++ и команды подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
08.05.2009, 09:24     работа с указателями
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
const int n = 3;
const int m = 4;
 
using namespace std;
 
int main(int argc, char *argv[])
{
  int z[n][m]; // Имя любого массива (хоть двумерного, хоть 10-мерного) является указателем на первый элемент
 
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      cin >> *(*(z + i) + j); //
  
 
  for (int i=0; i< n; i++)
  {
    for (int j=0; j < m; j++)
      cout << *(*(z + i) + j) << "\t";
    cout << endl;
  }
 
  system("PAUSE");
  return EXIT_SUCCESS;
}
Просто запомни что имя массива является указателем на первый элемент, следовательно ты можешь с именем массива обращаться как с указателем.
В случае с двумерным массивом он (массив) грубо говоря является массивом указателей на массивы чисел, т.е.
C++
1
2
3
4
5
int z[3][3] = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};
можно представить как:
z[1] указатель на {1, 2, 3}
z[2] указатель на {4, 5, 6}
z[3] указатель на {7, 8, 9}

Т.е. z[i] есть указатель на i-ую строку в массиве.

Когда ты пишешь z[i][j] идет обращений к j-му элементу i-ой строки.

Теперь давай разберемся с последовательностью выполнения такого вот оператора: *(*(z + i) + j) (который полностью эквивалентен оператору z[i][j])
1. z + i -получаем указатель типа int** на i-ую строку
2. *(z + i) - получаем строку (которая по сути является одномерным массивом), т.е. указатель типа int*
3. *(z + i) + j - получаем указатель на j-ый элемент i-ой строки, т.е. указатель типа int*
4. *(*(z + i) + j) - собственно получаем сам j-ый элемент i-ой строки, т.е. int.

И еще совет: не пользуйся типами short int, long double без необходимости, т.к. когда ты пишешь
C++
1
short int n = 4;
4 рассматривается как тип int, а следовательно компилятору приходится эту четверку преобразовывать к типу short int, везде где можно используй стандартный типы:
C++
1
bool, char, int, double
 
Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru