Форум программистов, компьютерный форум 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 нечетно. " подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.06.2011, 07:11     Указатели
Цитата Сообщение от Hagrael Посмотреть сообщение
я пытался это делать через операцию b=&a, но компилятор ругается, говорит, что операция &a возвращает указатель.
Указатель есть целое специального вида и системно зависимой разрядности. Например, в windows xp указатель 32-х битный. Приведи (можно неявно) указатель к обычному целому и будет тебе счастье.

Добавлено через 32 минуты
Цитата Сообщение от Hagrael Посмотреть сообщение
Почему имеет значение тип указателя? Ведь это просто ссылка на переменную.
Во-первых не бывает "просто ссылки". Ссылка - это вполне определённая сущность со своими синтаксисом и семантикой. А во-вторых указатель - не ссылка. Указатель хранит адрес того данного, или подпрограммы, куда он указывает, причём, этот адрес хранится в виде наименьшего из номеров байт, принадлежащих данному, или подпрограмме, на которую указывает указатель. Ссылка же это совсем другое. Написал ты
C++
1
a=b;
. Откуда надо взять данное и куда поместить? Процессор ведь не знает переменных. Поэтому на саом деле здесь копирование ячеек памяти, доступ к которым осуществляется по их по адресам. При трансляции компил отвёл переменной b один адрес, переменной а - другой. На этапе трансляции это тоже укзатели. Но вот прога полнотью скомпилена и записана на диск, и больше там нет никаких указателей. Отвёл компил память под переменные, когда увидел в тексте
C++
1
float a, b, *c;// Тип может быть любым другим
, создав указаетели во внутренней таблице, потом увидел
C++
1
b=a;
и пишет в код значения указателей, но не обращение к самим указателям. Далее он видеит
C++
1
*c=a;
и поступает с b точно также, а адрес c будет загружен из данного на этапе исполнения программы: указатель есть данное, хранящее адрес, адрес c будет загружен на этапе исполенния программы из указателя, а его адрес на будет на этапе трансляции записан в код. То есть дресация с косвенная (взять адрес из данного по адресу, потом осуществить по нему доступ к данному), а адресация a - прямая (осуществить доступ к данному по готовому адресу). На этапе же трансляции указателю соответсвует уже указатель на указатель, а не на статическую переменную. Так вот ссылка есть копия указателя времени трансляции, либо разыменованный указатель времени исполнения. То есть нет ни какой гарантии стандарта, что укзатель будет существовать и использоваться для косвенной адресации на этапе исполнения программы, хотя такой вариант и возможен. Если же написать
C++
1
2
3
4
float a;
float &b=a;
float *c;
c=&b;
, то в указатль времени исполнения c будет скопирован адрес a, в отличие
C++
1
2
3
4
float a;
float *b=&a;
float **c;
c=&b;
, где в указатель времени исполнения c будет скопирован адрес b, то есть адрес указателя. и sizeof для указателя вернёт разрядность в байтах указателя, а для ссылки sizeof вернёт разрядность в байтах данного, на которое она ссылается.

Добавлено через 19 минут
Цитата Сообщение от Hagrael Посмотреть сообщение
3) Как программа узнает, какие места ОЗУ ей можно занимать (не заняты др. программой), а какие - нет.
А ни какие места и не заняты другой программой, кроме тех, которые заняты операционной системой, её же адреса принадлежат стандартному для данной системы диапазону. Фокус в виртуальных адресах. Любое место ОЗУ имеет два адреса: физичесткий и виртуальный. Физический - это тот, с которым работает аппаратное обеспечение компьютера. Виртуальный же адрес известен только программам, причём, максисмум двум и одна из них всегда операционная система. Но по виртуальному адресу можно вычислить физический. Вот представь себе Землю. Как на Земле можно адересовать участок суши? Конечно же географическими координатами. А как ещё? Стоит на том участке суши дом, на доме табличка с названием улицы и номером дома. Я в письме написал "ул. Кирова, д. № 74". Дом наёдёшь? Даже если город знаешь, но раньше там ни разу не был, спрашивать нельзя, а таблички заляпаны грязью, то дом ты не найдёшь. Потому что не знаешь, какому ральному полоэжению в пространстве соотвествует этот адрес. Таблички протрёшь? Эйси. А если я ещё скопировал карту города, произвольно перименовал на ней улицы и пернумеровал дома и адрес указаел по этой карте? Виртуальный адрес - это адрес по такой отсебяьей карте. Прчиём, их может быть много в одном и том же городе. В одном случае это на самом деле ул. Орджоникидце, д. № 73, в другом ул. 25 лет октября, д. № 12, в третьем действительно ул. Кирова, д. № 74. То есть один и тот же виртуальный адрес может соотвествовать разным местам. В ОЗУ тоже один вирутальынй адрес может соответствовать разным местам, а для каждой программы существует своё соответствие виртуальынх адресов физическим. С физическими же адресами программы не работают и их даже не знают. А динамическую память ещё и выдаёт операционная система, а она то уж точно знает, какие адреса чем заняты.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru