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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибки копиляции http://www.cyberforum.ru/cpp-beginners/thread325130.html
Решил изучать С++ по книге Стефана Р. Девиса "С++ для начинающих". Написал пример програмки из книги в DEV-C++. Всё написано правильно, однако при компиляции происходят ошибки, которые вы видете на фото. При нажатии на первую строчку в строке ошибок ничего не происходит, а если нажать на остальные, ошибки выделяются. Подскажите пожалуйста, как их исправить. Вроде бы всё представил...
C++ что не так с программой? С++. помогите, пожалуйста, завтра сдавать уже! при компиляции виснет. Задание такое: в матрице найти 1) максимум среди сумм диагоналей, параллельных побочной 2) произведение в тех строках, где нет отрицательных элементов вот мой код: #include<iostream.h> #include<math.h> void main() http://www.cyberforum.ru/cpp-beginners/thread325129.html
Ошибка в строке file.write C++
Помогите разобраться с записью file.write (49строчка) в чем ошибка??? #include <iostream> #include <fstream> #include <stdlib.h> #include <locale> #include <iterator> #include <conio.h> #include <string> #include <vector> #include <algorithm>
C++ Написать программу, которая по номеру месяца выдает название следующего за ним месяца (при т = 1 получаем февраль, 4 - май и т.д.).
Написать программу, которая по номеру месяца выдает название следующего за ним месяца (при т = 1 получаем февраль, 4 - май и т.д.). Решить задачу в VC++.
C++ Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора http://www.cyberforum.ru/cpp-beginners/thread325098.html
Есть задача Даны целые положительные числа M, N и набор из M чисел. Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора (в том же порядке). предположим M=3 N=3 матрица но что значит набор из М чисел? исходя из логики матрица будет 3 3 3 3 3 3 3 3 3 та чтоли?
C++ Из массива A сформировать массив B Пожалуйста кто может помогите! В субботу экзамен - нужен допуск... а я не знаю как справиться с этой задачей((( уже не знаю к кому обратиться(( Задача в с++ "Для заданного массива A из M чисел сформируйте массив В из M/2 чисел по формуле: B(i) = (A(i) + A(M + 1 - i))/2. Предусмотрите случай когда M нечетно. " подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
24.06.2011, 12:03     Указатели
Цитата Сообщение от Hagrael Посмотреть сообщение
Спасибо за различные способы, но последний я не до конца понял. Там, что, int используется как класс? И что означает size? Буду признателен, если вы объясните.
это означает выделение динамическое выделение памяти под массив размером size
Я, кажется, понял! Операция &a возвращает указатель, однако указатель можно преобразовать в простой тип int! Почему именно указатель, а не простой тип (который можно было бы преобразовать в указатель)? Потому, что гораздо чаще с этой операции нужно получить указатель, чем сам адрес, и потому для быстроты разработчики решили, что операция &a должна возвращать указатель. Все верно?
Не совсем. Указатель на переменную не просто хранит беззнаковое целое число (если бы это было не так, то везде можно было бы использовать вместо указателей переменные типа size_t), но он еще и знает о размере типа, на переменную которого он указывает. Это необходимо при разыменовании и арифметике указателей (т.е. инкременте или декременте). Например:
C
1
2
3
4
5
6
7
double d, *pd;
int i, *pi;
char p, *pc;
pi = &i, pd = &d;
++pi; // адрес i + sizeof(int)
++pd; // адрес d + sizeof(double)
++pc; // адрес с + sizeof(char)
Как видно, при инкременте указателей разных типов переход по памяти происходит именно на размер данного типа. В этом легко убедиться, если распечатать значения указателей
А вот это интересно! Тогда, выходит, ты сам задаешь адрес для указателя? И если так, то такой код:
C++
1
2
int* p=(int*) 123;
cout << *p;
выдает ошибку "Память не может быть reed", поскольку это запретный для моей программы узел?
Так делать нельзя. Память в программе должна быть либо выделена статически, либо динамически. Ты же взял произвольный адрес (невыделенной памяти), и попытался его разыменовать (т.е. вывести значение переменной типа int, находящееся по адресу 123), и, естественно, это приводит к ошибке.
И снова еще один способ преобразовать тип переменной! Да сколько их там вообще?))
C++
1
2
3
b=static_cast<int>(a);
b=int(a);
b=(int) a;
Они все чем-то отличаются или нет?
первая строка - явное приведение типов в стиле С++, вторая - инициализация переменной b, третья - явное приведение типов в стиле С
Хм. Теперь у меня возник такой вопрос: Как вообще программа узнает, сколько байт имеет та или иная переменная? Вот к примеру код:
C++
1
2
int a;
a=5.5;
Вот откуда программа узнает, что надо отбросить дробную часть?
Тут происходит неявное приведение типов
В самой переменной a ведь не хранится ее размер.
Тип и размер ВСЕХ переменных известен на уже этапе компиляции
По-моему, тип уже лежит в коде, и программе не надо узнавать его. То есть когда ты говоришь int a;, компилятор запоминает, что переменная a в данном скопе имеет тип int и в последствии в откомпилированном коде что-то меняется.
Поздравляю, ты открыл статическую типизацию
То есть в коде не сказано
Код
Присвоить переменной a значение 5.5
а написано
Код
Присвоить переменной а значение 5.5 без дробной части
Я правильно понимаю?
Нет, в коде сказано: у нас есть значение типа double, а переменная типа int. Несоответствие. Надо выполнить приведение типов (а при этом как раз происходит отбрасывание дробной части)
 
Текущее время: 15:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru