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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

Как правильно? - C++

27.08.2011, 15:37. Просмотров 924. Ответов 26
Метки нет (Все метки)

Совершать итерацию, по куску памяти выделенному в куче?

например
C++
1
int* t = new int [10];
Как перемещаться. С каким шагом?


Или
C++
1
2
3
4
5
struct S
{
int a;
};
S* st = new S [10]
Как мне подсказали на форуме минимальный адресуемый размер это байт.
на встроенном массиве:

C++
1
2
3
4
5
6
int mas [10] ={0};
 
mas [6] = 7;
 
int* z1 = & mas[1];
int* z2 = & mas[2];
шаг равен 4, т.е. размеру инта (z1, z2);
А в куче?

C++
1
2
t++; //отличается более чем на 4;
t+sizeof(int);// тоже адрес более чем на 4 отличается.
В чем ошибка? Как перемещаться подскажите плиз
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно? (C++):

Как правильно вписать функцию в h-файл и правильно её отразить в основной функции? - C++
Создать внешнюю библиотеку, в которой написана функция вывода символьного массива обратном порядке. Подключить данную библиотеку к ...

Как правильно унаследовать TPoint2D от TPoint3D/ Правильно ли наследовать? ООП - C++
Два пользовательских класса: Точка в 2D пространстве и точка в 3D пространстве. class TPoint3D{ int X,Y,Z; public: ...

как объявить правильно tr и как его использовать при вызове функции? - C++
main.cpp case 8: cout << "Firs trapec # is: "; cin >> k; k = k - 1; cout << "Second trapec # is: "; cin >> j;...

Как правильно использовать классы? Как вывести значение класса на экран? - C++
Всех приветствую. Делаю задание по книге. По заданию нужно завести класс, в котором хранится информация о книгах: число выданных на руки...

Как правильно вызвать метод в С++ и как использовать команду goto в default - C++
#include <iostream>; #include <conio.h>; using namespace std; void main() { setlocale(LC_ALL, "Rus"); calculate(); ...

Как правильно записать алгоритм и как отобразить max и min? - C++
как правильно записать алгоритм и как отобразить max и min h = min {a,b,max{c,d}}

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
27.08.2011, 16:50 #16
AzaKendler, вот в догонку ещё пример
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(void){
    int arr[] = { 1, 2, 3, 4 };
    char * p = (char*)arr + 2 * sizeof(int);
    printf("%d\n", *((int*)p));
 
    return 0;
}
попробуйте угадать, что выведется, а потом скомпилируйте и проверьте...
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.08.2011, 17:03  [ТС] #17
easybudda, прости не уловил. приводится к чару зачем то. Я только учусь. Тонкий пример хотя бы сам прокомментируй, не уловил

Добавлено через 8 минут
grizlik78,хип коррупшн вернулся. ты прав
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
27.08.2011, 17:10 #18
sizeof(A) в той формуле абсолютно лишний. Именно из-за арифметики указателей.
Цитата Сообщение от AzaKendler Посмотреть сообщение
Это теория которую я знаю.
Выходит, что нет.
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.08.2011, 17:13  [ТС] #19
grizlik78, а что конкретно. ткни носом. Двигаем на шаг равный размеру типа? Разве нет?

Добавлено через 40 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
sizeof(A) в той формуле абсолютно лишний.
"кто за него?"
ладно я в гугл
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 17:16 #20
AzaKendler, да компилятор сам сдвинет на шаг, равный размеру типа. Ему явно этого указывать не нужно.
C++
1
2
3
int a[] = {1, 2, 3};
int *ptr_a = a;
ptr_a = ptr_a + 1; // компилятор сам сдвинет указатель на 4 байта, хотя мы указали 1
1
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.08.2011, 17:21  [ТС] #21
убрал.
теперь вот так

C++
1
return (top+i)->val;
результат на картинке.
0
Миниатюры
Как правильно?  
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 17:24 #22
Цитата Сообщение от silent_1991 Посмотреть сообщение
в общем случае, бывают колебания в зависимости от компилятора и ОС)
от разрядности ОС
2
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
27.08.2011, 17:32 #23
Цитата Сообщение от AzaKendler Посмотреть сообщение
результат на картинке.
Возможно ты чего-то недоговариваешь, так как программа из #7 в принципе не компилируема.
Не верю (с), в общем.
1
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.08.2011, 17:36  [ТС] #24
grizlik78, спасибо в квадрате. ошибка была не там. а в конструкторе. И за арифметику спасибо. Буду читать еще раз. и еще раз.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 17:44 #25
Цитата Сообщение от Deviaphan Посмотреть сообщение
от разрядности ОС
Точно)) Что-то сегодня я не в духе...
0
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
27.08.2011, 18:24 #26
Цитата Сообщение от AzaKendler Посмотреть сообщение
return (top+i)->val;
Может все таки упростить запись до:
C++
1
return top[i].val;
?
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.08.2011, 18:28  [ТС] #27
CyBOSSeR, да можно и так.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 18:28
Привет! Вот еще темы с ответами:

Как правильно записывать условные операторы и как прервать проверку при достижении результата? - C++
доброго времени суток форумчане, подскажите пожалуйста как остановить условие после правильно выполненного условия.#include &quot;stdafx.h&quot; ...

Как лучше это сделать?. а главное, как правильно? (Информационная система «Железнодорожный вокзал») - C++
Ситуация следующая... Есть задание курсовой работы: 11. Информационная система «Железнодорожный вокзал». Информация: рейсы — номер...

C++ как правильно передавать функцию как параметр? - C++
Всем првет! Я кодю на OpenGL и сделал клас Game у меня в етом класе есть функция DrawGLScene(); как мне передать ее в ...

Прошу сказать, правильно ли я решил, и , если не правильно, то указать ошибки - C++
Есть задачка \sum_{i=0}^{8}\sum_{j=0}^{10}\sum_{k=0}^{3}\left(\frac{i+3k-4j}{2+3i+4j} \right) и есть мой код (сразу говорю, я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2011, 18:28
Ответ Создать тему
Опции темы

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