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

Понимание адреса, ссылки и указателя - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория про new http://www.cyberforum.ru/cpp-beginners/thread591164.html
Помогите пожалуйста понять как работает new. При перегрузке требуется, чтобы у функции был параметр size_t, причем нельзя присваивать ему default значение. Объясните, что является таким параметром в данном вызове: int* a = new int; Или это тоже самое, что и int* a = new int; И как тогда выглядит вызов такой перегруженной функци: void* operator new(const size_t& size, const int& obj);
C++ Компилятор ругается на static переменные Есть класс: class Node{ public: Node(void) : data(0), next(0), prev(0), first(0), last(0), size(0){} Node(const _My& Val){ data = new _My(Val); size++; } ~Node(void){} _My* data; http://www.cyberforum.ru/cpp-beginners/thread591160.html
Определить, какой элемент двумерного динамического массива больше: расположен в левом верхнем или в верхнем правом углу C++
Определить а) какой элемент двумерного массива больше: расположен в левом верхнем или в верхнем правом углу; б) какой элемент двумерного массива меньше: расположенный в нижнем правом или в верхнем левом углу.
C++ Сортировка Хоара
помогите правильно вставить счетчик шагов. Насколько я понял, функция сама себя перезапускает, тоесть надо в тело функции кидать, но так получается 100+ шагов, многовато ... #include <iostream> #include <conio.h> using namespace std; int mass; int i,j,N,ns=0; int quickSortR(int* mass, int N) { i = 0, j = N; int temp, p; ns++;
C++ Удалить из стека последний элемент http://www.cyberforum.ru/cpp-beginners/thread591144.html
Информационное поле стека числовое. Удалить из стека последний елемент. Добавлено через 48 минут Вот есть стек, но он меняет местами. #include<iostream> #include<conio.h> using namespace std; struct node {
C++ Два треугольника заданы координатами своих вершин. Вычислить их площади Два треугольника заданы координатами своих вершин. Вычислить их площади по формуле S=1/2((Х2-Х1)(Y3-Y1)-(X3-X1)(Y2-Y1)) и определить, какой из них имеет большую площадь. подробнее

Показать сообщение отдельно
The_Immortal
1551 / 487 / 8
Регистрация: 04.04.2009
Сообщений: 1,891

Понимание адреса, ссылки и указателя - C++

30.05.2012, 11:31. Просмотров 4859. Ответов 103
Метки (Все метки)

Гм... Конечно, стремно создавать подобную тему, однако, уж очень захотелось понять все это дело. Правда сколько раз ни пытался - не удавалось ни разу, возможно, потому что пытался разобраться самостоятельно (хотя, наверное, многие это постигают именно так). Но вот моя очередная попытка, которую решил так сказать обнародовать Поэтому очень рассчитываю на вашу помощь и поддержку.

Итак, начал практически с самого начала и уже сразу же зашел в тупик.
Ниже приведен легенький код, демонстрирующий расположение переменных в памяти компа.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// расположение переменных в памяти
#include <cstdio.h>
#include <cstlib.h>
#include <iostream.h>
 
using namespace std;
 
int main(int intArgc, char* pszArgs[])
{
int end;
int n;
long l;
float f;
double d;
 
// Вывод в шестнадцатеричном виде
cout.setf (ios::hex);
cout.unsetf (ios::hex);
 
// выводить адреса переменных
// по очереди, чтобы показать размер
// каждой переменной
cout << "--- = " << &end << "\n";
cout << "&n = " << &n << "\n";
cout << "&l = " << &l << "\n";
cout << "&f = " << &f << "\n";
cout << "&d = " << &d << "\n";
 
system ("PAUSE");
return 0;
}
Результат:

C++
1
2
3
4
5
--- = 0x22ff6c
&n  = 0x22ff68
&l  = 0x22ff64
&f  = 0x22ff60
&d  = 0x22ff58
А теперь цитата из книги:
Обратите внимание на то, что переменная n располагается ровно в 4 байтах от переменной end (---). Переменная l располагается еще на 4 байта ниже, а переменная типа double занимает 8 байт. Для каждой переменной выделяется память, необходимая для ее типа.
Для каждой переменной выделяется память, необходимая для ее типа.
Это мне известно. Но вот что меня занесло в тупик:

Разница, скажем, между 0x22ff6c и 0x22ff68 действительно 4. Но 4 чего - байта? А разве 4 в десятичной системе не 4? А в двоичной это разве не 100? Откуда тут 4 байта? Я понимаю, что там должно быть 4 байта, но не получается осознать, что 1 hex-единица у нас вдруг байт. Или это не так?

В общем, на таком банальном я запутался

Спасайте...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru