Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 22.06.2017
Сообщений: 11
1

Использование указателя. Почему глобальная переменная работает, а указатель нет?

06.07.2017, 19:07. Показов 991. Ответов 5
Метки нет (Все метки)

Не понимаю почему не работают указатели.
Вроде все просто а результат не правильный.
И еще если я объявляю 2-3-4 указателя, у них почему-то один и тот же адрес в памяти.
Этот код тому наглядное тому подтверждение.
Что не так ?
Кликните здесь для просмотра всего текста

#include "stdafx.h"
#include <iostream>
#include <string>

#include <cstdlib>
#include <string>
#include <windows.h>
using namespace std;

double *x, *y;// так не работает
double Func1(double a, double b)
{
x = &a;
y = &b;
return a*b;
}

double x12, y12; // так РАБОТАЕТ!
double Func2(double a, double b)
{
x12 = a;
y12 = b;
return a*b;
}


int main()
{
double bb, aa, aa1, bb1,res1,res2;
bb = 3;
aa = 2;
bb1 = 4;
aa1 = 4;

res1 = Func2(aa, bb);
cout << "res1 " << res1 << endl;
cout << " x1: " << x12 << " y1: " << y12 << endl;
cout << res1 << endl;

cout << res1 << endl;

res2 = Func1(aa1, bb1);
cout << "***res2 " << res1 << endl;
cout << " x1: " << *x << " y1: " << *y << endl;
system("pause");
return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2017, 19:07
Ответы с готовыми решениями:

При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему?
Hi All! class SomeObj { public: int x; }

Не создаётся глобальная переменная, что ли... Почему?
&lt;HTML&gt; &lt;HEAD&gt; &lt;TITLE&gt; Test page &lt;/TITLE&gt; &lt;/HEAD&gt; &lt;BODY&gt; &lt;p&gt; &lt;P&gt;Authorize ...

Почему глобальная переменная не изменяется из функции?
Здравствуйте! Делаю такую программу. Сначала создаю анимацию - увеличение размеров контейнера....

Не работает глобальная переменная
В файле конфиг такие строки $isEnabledFullNames = false; $mysqli = new mysqli('localhost',...

5
298 / 207 / 174
Регистрация: 11.05.2016
Сообщений: 658
06.07.2017, 21:09 2
Лучший ответ Сообщение было отмечено Андрей Попов как решение

Решение

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <string>
 
#include <cstdlib>
#include <string>
#include <windows.h>
using namespace std;
 
double *x, *y;// так не работает 
double Func1(double &a, double &b)
{
    x = &a;
    y = &b;
    return (*x)*(*y);
}
 
double x12, y12; // так РАБОТАЕТ!
double Func2(double a, double b)
{
    x12 = a;
    y12 = b;
    return a*b;
}
 
 
int main()
{
    double bb, aa, aa1, bb1,res1,res2;
    bb = 3;
    aa = 2;
    bb1 = 4;
    aa1 = 4;
 
    res1 = Func2(aa, bb);
    cout << "res1 " << res1 << endl;
    cout << " x1: " << x12 << " y1: " << y12 << endl;
    cout << res1 << endl;
 
    cout << res1 << endl;
 
    res2 = Func1(aa1, bb1);
    cout << "***res2 " << res2 << endl;
    cout << " x1: " << *x << " y1: " << *y << endl;
    system("pause");
    return 0;
}
Добавлено через 7 минут
Цитата Сообщение от Андрей Попов Посмотреть сообщение
C++
1
2
3
4
5
6
double Func1(double a, double b)
{
x = &a;
y = &b;
return a*b;
}
при передаче аргументов таким образом создаются копии, которые уничтожаются после выполнения ф-ии, т.е. в указатели записан адрес копии -> после выполнения ф-ии они указывают черт знает куда


Цитата Сообщение от Андрей Попов Посмотреть сообщение
C++
1
cout << "***res2 " << res1 << endl;
res2
1
Велосипедист...
351 / 218 / 73
Регистрация: 15.12.2015
Сообщений: 785
06.07.2017, 22:20 3
Цитата Сообщение от Herji Посмотреть сообщение
при передаче аргументов таким образом создаются копии, которые уничтожаются после выполнения ф-ии, т.е. в указатели записан адрес копии -> после выполнения ф-ии они указывают черт знает куда
Указывают-то они туда же, только вот что там теперь лежит — это вопрос
0
298 / 207 / 174
Регистрация: 11.05.2016
Сообщений: 658
06.07.2017, 22:35 4
Да, так гораздо яснее сформулировано)
0
С чаем беда...
Эксперт CЭксперт С++
9132 / 4651 / 1267
Регистрация: 18.10.2014
Сообщений: 10,485
07.07.2017, 01:22 5
Цитата Сообщение от Андрей Попов Посмотреть сообщение
И еще если я объявляю 2-3-4 указателя, у них почему-то один и тот же адрес в памяти.
Этот код тому наглядное тому подтверждение.
О чем вообще речь и где именно в коде мы должны увидеть "наглядное тому подтверждение"?
0
1 / 1 / 0
Регистрация: 22.06.2017
Сообщений: 11
10.07.2017, 21:07  [ТС] 6
double *x, *y;// так не работает
double *x1, *y1;// так не работает у меня имели один и тот же адрес памяти.
Сейчас понял в чем дело, спасибо Herji
Указатель ссылался на уже уничтоженные локальные переменные, поэтому получилась белиберда.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2017, 21:07

Глобальная переменная не работает
сделал такой код &lt;html&gt;&lt;head&gt; &lt;script type=&quot;text/javascript&quot;&gt; var rs=1; function r1(){var...

Не работает глобальная переменная
Всем привет! В общем проблема у меня в том, что не увеличивается значение на +1 когда я нажимаю на...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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