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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
#1

Область видимости переменной - C++

29.04.2011, 19:00. Просмотров 1376. Ответов 17
Метки нет (Все метки)

Пожалуйста проясните новичку почему следующий код выводит сообщение messagebeer вместо message ? . Я только осваиваю язык поэтому хочу разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
void myfunction(LPTSTR f);
int main()
 
{
  
   char f[]="message";
   myfunction(f);
   cout<<f;
   cin.get();
   return 0;
    
}
 
void myfunction(LPTSTR f)
{
    strcat(f,"beer");      
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2011, 19:00     Область видимости переменной
Посмотрите здесь:

Область видимости переменной - C++
#include &lt;iostream&gt; int main() { int i = 5; for(int i = 0; i &lt; 5; i++) { //здесь } return 0;

Область видимости переменной в классе - C++
допустим у меня есть класс A class A { public : ..... std::vector&lt;g *&gt; list; ...... }; и класс наследник class B :...

Область видимости переменной пользовательского класса - C++
Всем привет! Столкнулся с такой проблемой: Создал клас и в нем класс исключений class A { char* pt; public: class...

Область видимости - C++
Даю фрагмент программы: #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cmath&gt; struct elem //тип элемента двусвязного списка ...

Область видимости - C++
У меня возникла проблема с областью видимости. вот у меня два класса class Obj { public: Win *parent;

Область видимости в С++ - C++
В книге С++ Бархатный путь. ( http://khpi-iip.mipk.kharkiv.edu/library/extent/prog/cppvw/cpp_047.html) сказано, что область действия имен...

Область видимости - C++
func { int someVariable; { int someVariable; //можно ли как нибудь получить доступ к переменной...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.04.2011, 19:02     Область видимости переменной #2
C++
1
"message\n"
или
C++
1
"\nbeer"
В общем у вас нету разделителей между строками, если вас это беспокоит.
Ваша функция добавляет к f(message) "beer", получается "messagebeer".
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
29.04.2011, 19:04  [ТС]     Область видимости переменной #3
diagon,
Я не понимаю что Вы этим хотели сказать
Меня беспокоит почему выводится messagebeer вместо message, ведь в функции myfunc() переменная f должна быть локальной, т.е. изменения переменной в нутри этой фунции не должны влиять на переменную f обьявленую в теле main. Или я просто чего то непонимаю ?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.04.2011, 19:10     Область видимости переменной #4
Если бы вы объявили ее внутри функции, то она была бы локальной... А у вас она лишь один из аргументов... Точнее единственный аргумент.
AlexeyDevil
21 / 21 / 2
Регистрация: 06.11.2010
Сообщений: 57
29.04.2011, 19:13     Область видимости переменной #5
Тебе отдельно два слова нужно что ли вывести?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.04.2011, 19:14     Область видимости переменной #6
Теперь это действительно локальная переменная, и она не влияет на main=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
void myfunction();
int main()
 
{
 
   char f[]="message";
   myfunction();
   cout<<f;
   cin.get();
   return 0;
 
}
 
void myfunction()
{
    LPTSTR f;
    strcat(f,"beer");
}
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
29.04.2011, 19:16  [ТС]     Область видимости переменной #7
В Вашем примере работа программы не выполняется (
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.04.2011, 19:18     Область видимости переменной #8
А что она должна делать-то? Если склеивать строки,то в первом сообщении вы выложили рабочий вроде код.
Если демонстрировать область видимости переменной-то все работает.
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
29.04.2011, 19:19  [ТС]     Область видимости переменной #9
В этом случае выводит 5, т.е. правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
void myfunction(int f);
int main()
 
{
  
   int f=5;
   myfunction(f);
   cout<<f;
   cin.get();
   return 0;
    
}
 
void myfunction(int f)
{
    f=4;      
}
Почему в первом случае выводит messagebeer а не message ?
litoq
10 / 10 / 1
Регистрация: 11.12.2010
Сообщений: 12
29.04.2011, 19:20     Область видимости переменной #10
Потому что ты указатель в функцию передаешь...
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
29.04.2011, 19:22  [ТС]     Область видимости переменной #11
litoq, Можно немного подробней
Все я понял, спасибо litoq
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.04.2011, 19:41     Область видимости переменной #12
LedZeppelin, В функцию передаётся не массив, а только лишь адрес первого элемента. Поэтому все изменения, произведённые над переданным в функцию массивом внутри этой функции, отражаются на реальном массиве.
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
29.04.2011, 21:31  [ТС]     Область видимости переменной #13
silent_1991
Я учту это, спасибо.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
29.04.2011, 23:03     Область видимости переменной #14
А меня одного смущает, что объявление
Цитата Сообщение от diagon Посмотреть сообщение
char f[]="message";
подразумевает массив из 7 + 1 символов, а к нему ещё
Цитата Сообщение от LedZeppelin Посмотреть сообщение
strcat(f,"beer");
приделывается? То есть выход за границу массива...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2011, 19:56     Область видимости переменной
Еще ссылки по теме:

область видимости класса - C++
А почему у меня ошибку выдает? Не могу понять using namespace std; class Base { int a; public: Base(int aa) { a = aa; } ...

Structure (Область видимости) - C++
struct.cpp:38:13: ошибка: нет декларации «TechnicalType» в этой области видимости помогите поправить :c 38 строка // //Failname:...

Указатель и область видимости - C++
Упрощенный пример моего кода: class A { public: int x; void F() { A*c = new A; ....

Область видимости переменных - C++
Здравствуйте. Столкнулся со следующей проблемой: есть файл main.cpp: int a, b; #include &quot;class.h&quot; int main() { ...

Область видимости переменных - C++
Как использовать одну переменную в нескольких файлах, если эта переменная задана только в одном. Файлы между собой связаны Добавлено...


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

Или воспользуйтесь поиском по форуму:
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
30.04.2011, 19:56  [ТС]     Область видимости переменной #15
easybudda
А что разве функция strcat() не добавляет новые индексы автоматически (куда она тогда помещает новые символы ?) ?
И если так тогда как предусматреть это?
Yandex
Объявления
30.04.2011, 19:56     Область видимости переменной
Ответ Создать тему
Опции темы

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