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

Указатели С - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С чего начать создания графического тетриса http://www.cyberforum.ru/cpp-beginners/thread688740.html
Подскажите пожалуйста, хочу создать тетрис похожий как на изображении, с чего мне нужно начать? До этого создавал только небольшие консольные приложения. Желательно с того какой создать проект нужно (ATL,win32,CLR и т.п.)
C++ Сортировка двумерного массива По бумажке расписал - вроде всё правильно, но работает некорректно. Где ошибка? void sort(int **p, int n, int m) { int i,j,k,l,temp,max_i,max_j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { max_i=i; http://www.cyberforum.ru/cpp-beginners/thread688739.html
C++ Работа с несколькими файлами
Помогите пожалуста исправить ошибки //main.cpp #include <iostream> #include <conio.h> #include "menu.h" using namespace std; int main() { string s;
C++ Трудности с ответом
1) Дана следуюшая declarations: int myFunction(int myValue); int myArray; Что из ниже следуюшего имеет легальный call to this function? Question 1 options: A) cout << myFunction(myArray); B) cout << myFunction(myArray);
C++ Поместить в новый массив одинаковые элементы исходных http://www.cyberforum.ru/cpp-beginners/thread688727.html
Помогите, пожалуйста) Нужно создать 3й массив длинной 5 по двум массивам длинной по 5 (мы их сами задаём с клавы). В 3м массиве должны быть одинаковые элементы с первого и второго массивов. Вот то что я пробовала, смотрела на сайтах... #include<iostream.h> #include<conio.h> //#include<stdio.h> void main() { clrscr(); const int N=5;
C++ Возведение в степень -корень из 3 вот код #include "stdafx.h" #include <conio.h> #include <math.h> #include <iostream> using namespace std; void main() {double a=3.2,b=17.5,x=-4.8; double Y,Z; Y=pow(b,3)*(tan(x)*tan(x))-a/(sin(x/a)*sin(x/a)); подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.11.2012, 21:27     Указатели С
asidorchenko, эмм... А какое это всё имеет отношение к теме?
Inocs, это поведение связано с особенностями грамматики языка. Перед прочтение следующего текста советую получить общие сведения о том, что такое грамматика, и иметь ввиду, что по грамматике строится синтаксический анализатор - неотъемлемая часть компилятора. Предупреждаю, всё сказанное является достаточно непростым для восприятия для неподготовленного человека, на это объяснения является достаточно исчерпывающим для того, чтобы понять, как же компилятор видит абсурдное с первого взгляда выражение 1[data].
Лезем в стандарт языка С, приложение A, грамматика языка. Видим там:
Код
postfix-expression:
    primary-expression
    postfix-expression [ expression ]
    postfix-expression ( argument-expression-listopt )
    postfix-expression . identifier
    postfix-expression -> identifier
    postfix-expression ++
    postfix-expression --
    ( type-name ) { initializer-list }
    ( type-name ) { initializer-list , }
В соответствии с этой грамматикой можем иметь
postfix-expression -> postfix-expression [ expression ] -> primary-expression [ expression ]
Смотрим чуть выше. Видим там:
Код
primary-expression:
    identifier
    constant
    string-literal
    ( expression )
    generic-selection
Отсюда имеем
primary-expression -> constant
Значит с учётом двух приведённых выше выводов
postfix-expression -> constant [ expression ]
Далее смотрим, что такое expression. Полностью грамматику приводить тут нет смысла, достаточно привести следующий вывод:
expression -> assignment-expression -> conditional-expression -> logical-OR-expression -> logical-AND-expression -> inclusive-OR-expression -> exclusive-OR-expression -> AND-expression -> equality-expression -> relational-expression -> shift-expression -> additive-expression -> multiplicative-expression -> cast-expression -> unary-expression -> postfix-expression -> primary-expression -> identifier
Исходя из этого получаем:
postfix-expression -> constant [ identifier ]
Можно аналогичными рассуждениями прийти к тому, что
constant -> integer-constant
а разобравшись с тем, что же такое integer-constant, понять, что под это понятие подпадает константа 1. Разобравшись же с тем, что есть identifier, можно понять, что data является identifier. Окончательно можно заключить, что
1[data] является корректной для языка конструкцией и выводится из constant [ identifier ], т.е. является postfix-expression. Именно так, как я привел здесь устно, будет действовать компилятор при построении дерева разбора для выражения 1[data]. В конце концов он свернёт это выражение к postfix-expression, и этот узел дерева станет вершиной поддерева выражения, в которое входит данное подвыражение. Раз компилятор смог построить для этого выражения дерево разбора, то он сможет построить и код для вычисления этого выражения.
 
Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru