Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> typedef и new - Непонятен принцип работы 
:(
    Опции темы
n199a
  Дата 7.7.2013, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Пишу как научился, а то некоторым может показаться глупым расписываение элементарных вещей  smile 
Код

#include <stdio.h>

typedef int row[10];         //новый тип: массив из 10 элементов
main() {
    int N;

    row *A;              //указатель на массив

    printf("Введите число строк: ");
    scanf("%d", &N);

    A = new row[N];      //выделить память на N строк
    A[0][1] = 25;              //в ячейук 0:1 заносим число 25
    printf("%d", A[0][1]);

    delete A;                  //освобождаем память.
}


typedef говорит нам, что, любая переменная типа row (т.е. это как int, float и т.п.?) является указателем на целое число или на адрес массива целых чисел (в моем случает - это адрес массива). Как через отладчик посмотреть адрес массива в памяти?

row[10] - это одномерный массив, у которого (далее простым языком) есть одна "строчка" в которой расположены 10 чисел).
row *A - в указатель *А записывается адрес массива row.
A = new row[N]; - на сколько я понимаю, указатели дальше пишутся без знака "*" ?
Вообще не понятно, как одномерный массив превратился в матрицу?
PM MAIL   Вверх
akizelokro
Дата 7.7.2013, 01:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



row в тайпдефе определен как пользовательский тип int <пропускаем row> [10]
row[N] определяется уже как int <пропускаем row> [10][N]

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
akizelokro
Дата 7.7.2013, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Эти скобки никакого отношения к реальным, принятым в С++ не имеют. Просто так удобней для понимания, а скобки можно любые поставить. Они для выделения, что там где-то для компилятора виднеется row, но виднеется в таком виде. что как бы есть, но по сути нет.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
vvms
Дата 8.7.2013, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.10.2008

Репутация: нет
Всего: 1



Если уж:
Цитата

A = new row[N];      //выделить память на N строк

то нужно и 
Код

delete [] A;

а не:
Цитата

delete A;                  //освобождаем память.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.