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

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

Войти
Регистрация
Восстановить пароль
 
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
#1

Не понятно куда девается значение по указателю? - C++

10.12.2012, 17:19. Просмотров 233. Ответов 7
Метки нет (Все метки)

Есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class base
{
int count*;
public:
    base(int _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new (k);
    b ->print();//здесь не  выводится  10 почему???
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 17:19     Не понятно куда девается значение по указателю?
Посмотрите здесь:

Что и куда девается... - C++
Не очень хорошо знаю несколько вещей, а узнать хотелось бы очень. Вопрос 1. Локально объявленные переменные удаляются из памяти по...

Резкий выход из проги: куда девается выделенная переменной память? - C++
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int...

Узнать значение по указателю - C++
Пишу плагин для gta 3. В Cheat Engine я нашел нужный адрес, но он оказался динамическим.CE вычислил такой поинтер: Вопрос: как...

Присвоить указателю значение, пример из интернета - C++
Добрый вечер. В интернете находил парочку таких примеров: 1.) int *x; cout<<*x; *x=100; 2.)

Не получается присвоить значение указателю на функцию - C++
В строке 26 говорит, что не может конвертировать тип. Что неправильно? #include "stdafx.h" #include <iostream> #include <conio.h> ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13059 / 7322 / 817
Регистрация: 27.09.2012
Сообщений: 18,074
Записей в блоге: 3
Завершенные тесты: 1
10.12.2012, 17:23     Не понятно куда девается значение по указателю? #2
Цитата Сообщение от dqrest Посмотреть сообщение
base(int _c) { count = &_c; }
C++
1
2
3
4
    base(int _c)
    {
       count = &_c;
    }
_c - это локальная переменная. Она будет уничтожена при выходе из функции. Поэтому count будет указывать уже на освобожденную память.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.12.2012, 17:24     Не понятно куда девается значение по указателю? #3
Цитата Сообщение от dqrest Посмотреть сообщение
int count*;
Это что такое?
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
10.12.2012, 17:25     Не понятно куда девается значение по указателю? #4
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
#include <stdio.h>
 
using namespace std;
 
class base
{
int* count;
public:
    base(int _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base* b;
    b = new base(k);
    b ->print();//здесь выводится  10 )))
    return 0;
}
А вот так почему-то выводится

Добавлено через 34 секунды
Цитата Сообщение от David Sylva Посмотреть сообщение
Это что такое?
Я это у себя в коде исправил)
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 17:25     Не понятно куда девается значение по указателю? #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
class base
{
int* count;
public:
    base(int& _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new base(k);
    b ->print();
    return 0;
}
Croessmah
Модератор
Эксперт CЭксперт С++
13059 / 7322 / 817
Регистрация: 27.09.2012
Сообщений: 18,074
Записей в блоге: 3
Завершенные тесты: 1
10.12.2012, 17:25     Не понятно куда девается значение по указателю? #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class base
{
int * count;
public:
    base(int &_c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new base(k);
    b ->print();//здесь не  выводится  10 почему???
    return 0;
}
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.12.2012, 17:29     Не понятно куда девается значение по указателю? #7
dqrest кто тебя так научил, называть переменные int _c? Имена начинающиеся со знака подчёркивания, обычно резервируют для специальных средств реализации и сред выполнения, поэтому их не стоит использовать в обычных прикладных программах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 17:34     Не понятно куда девается значение по указателю?
Еще ссылки по теме:

ПРисвоить указателю нулевое значение- кк? с поммощщю каких знаков и действий? - C++
Пожалуста, обьясните принцип. Такого присвоения.

как i двигается понятно но вот не понятно как это делает j ? - C++
Здравствуйте, вопрос очень глупы но все же есть цикл for (int i = 0,j = 0; i &lt; source.length; i++) как i двигается понятно но вот не...

не понятно - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main () { int **mas, n, m, i, j, j1; double dva, ras,...

Не понятно тз - C++
Задание: cоставить программу, которая для каждого значения аргумента X от начального X0 до коненого Xn, с шагом dx выполняет следующие...


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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
10.12.2012, 17:34     Не понятно куда девается значение по указателю? #8
да не должно у тебя это работать!!!
Это
Цитата Сообщение от sovaz1997 Посмотреть сообщение
base(int _c) { count = &_c;}
присваивает count адрес параметра c. Угадай, где в памяти расположен аргумент с? Правильно! В стеке вместе с локальными переменными. И он будет уничтожен после выхода из функции. Соответственно по его адресу будет что угодно, но не _с. Если хочешь присвоить count адрес переменной из функции main
(которая хоть и тоже локальная, но живёт она всё время выполнения программы.) Тогда тебе надо принимать в метод не копию этой переменной(у которой мало того что адрес отличный от оригинала, так она ещё и живёт только до выхода из base()) А надо принимать
C++
1
base(int* _c) { count = _c;}
Yandex
Объявления
10.12.2012, 17:34     Не понятно куда девается значение по указателю?
Ответ Создать тему
Опции темы

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