Страница 1 из 3

Язык программирования C

Добавлено: 03 апр 2009, 16:55
YURI
Здравствуйте.
У меня имеется небольшой вопрос.
Есть матрица (m на n). Как нужно использовать #define, чтобы в теле программы можно было обращаться к элементам матрицы в формате a(i,j) ?

Язык программирования C

Добавлено: 03 апр 2009, 17:34
da67
#define a(i,j) a[i][j]
Так не работает?

Язык программирования C

Добавлено: 03 апр 2009, 17:46
delphiec
Непонятно для чего это нужно.

Код: Выбрать все

#define i число
#define j число

B программе массив[i][j] i и j заменяются на число.
Ho не видно практического смысла в этом.

Язык программирования C

Добавлено: 03 апр 2009, 17:49
A.I.
#define же используется для объявления констант. Сомневаюсь что получится изменить стандартное обращение к массиву. Синтаксис языка всё-таки

delphiec, это ты объявил константами i,j. Насколько я понял, это не то

Язык программирования C

Добавлено: 03 апр 2009, 17:56
qwertylol
YURI писал(а):Source of the post
Здравствуйте.
У меня имеется небольшой вопрос.
Есть матрица (m на n). Как нужно использовать #define, чтобы в теле программы можно было обращаться к элементам матрицы в формате a(i,j) ?

Нельзя так сделать.
Мне интересно, как тогда компилятор будет массивы от функций отличать .

Язык программирования C

Добавлено: 03 апр 2009, 18:04
YURI
delphiec писал(а):Source of the post
Непонятно для чего это нужно.

Код: Выбрать все

#define i число
#define j число

B программе массив[i][j] i и j заменяются на число.
Ho не видно практического смысла в этом.

Это не то.

#define a(i,j) a[i][j]
Так не работает?

Нет, ведь матрица задана в одномерном массиве.

#define же используется для объявления констант. Сомневаюсь что получится изменить стандартное обращение к массиву. Синтаксис языка всё-таки

delphiec, это ты объявил константами i,j. Насколько я понял, это не то

Да не то.

Я думал можно вот так,
#define a(i,j) a(i*n+j)
но не работает.

qwertylol писал(а):Source of the post
YURI писал(а):Source of the post
Здравствуйте.
У меня имеется небольшой вопрос.
Есть матрица (m на n). Как нужно использовать #define, чтобы в теле программы можно было обращаться к элементам матрицы в формате a(i,j) ?

Нельзя так сделать.
Мне интересно, как тогда компилятор будет массивы от функций отличать .

Знаю точно, что можно.

Язык программирования C

Добавлено: 03 апр 2009, 18:08
qwertylol
YURI писал(а):Source of the post
Знаю точно, что можно.

Знаю точно, что нельзя.

Язык программирования C

Добавлено: 03 апр 2009, 18:28
delphiec
Сори, не понял сразу вопроса.
Думается лучше сделать функцию и не использовать define

Язык программирования C

Добавлено: 03 апр 2009, 18:37
da67
qwertylol писал(а):Source of the post Мне интересно, как тогда компилятор будет массивы от функций отличать .
Компилятор получает текст уже после раскрытия всех макросов.


YURI писал(а):Source of the post
#define a(i,j) a[i][j]
Так не работает?
Нет, ведь матрица задана в одномерном массиве.
B исходном задании такого условия не было Это точно так? Как описан массив?
Я думал можно вот так,
#define a(i,j) a(i*n+j)
но не работает.
У второго a скобки должны быть квадратными.

Как всё же описан массив? Это важно.

Язык программирования C

Добавлено: 03 апр 2009, 18:59
qwertylol
da67 писал(а):Source of the post
Компилятор получает текст уже после раскрытия всех макросов.

A кто же тогда макросы раскрывает? Как раз компилятор получает исходный код и превращает его в бинарный.
Компилятор не сможет понять

Код: Выбрать все

a(0,3)

это обращение к массиву или к функции. Именно поэтому нельзя называть функцию и переменную одним именем.