7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
||||||
1 | ||||||
Область видимости переменной29.04.2011, 19:00. Показов 1912. Ответов 17
Метки нет (Все метки)
Пожалуйста проясните новичку почему следующий код выводит сообщение messagebeer вместо message ? . Я только осваиваю язык поэтому хочу разобраться.
0
|
29.04.2011, 19:00 | |
Ответы с готовыми решениями:
17
Область видимости переменной Область видимости переменной Область видимости переменной в классе Область видимости переменной пользовательского класса |
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
|
29.04.2011, 19:04 [ТС] | 3 |
diagon,
Я не понимаю что Вы этим хотели сказать Меня беспокоит почему выводится messagebeer вместо message, ведь в функции myfunc() переменная f должна быть локальной, т.е. изменения переменной в нутри этой фунции не должны влиять на переменную f обьявленую в теле main. Или я просто чего то непонимаю ?
0
|
21 / 21 / 4
Регистрация: 06.11.2010
Сообщений: 57
|
|
29.04.2011, 19:13 | 5 |
Тебе отдельно два слова нужно что ли вывести?
0
|
Higher
|
||||||
29.04.2011, 19:14 | 6 | |||||
Теперь это действительно локальная переменная, и она не влияет на main=)
0
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
|
29.04.2011, 19:16 [ТС] | 7 |
В Вашем примере работа программы не выполняется (
0
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
||||||
29.04.2011, 19:19 [ТС] | 9 | |||||
В этом случае выводит 5, т.е. правильно.
0
|
10 / 10 / 3
Регистрация: 11.12.2010
Сообщений: 12
|
|
29.04.2011, 19:20 | 10 |
Потому что ты указатель в функцию передаешь...
1
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
|
29.04.2011, 19:22 [ТС] | 11 |
litoq, Можно немного подробней
Все я понял, спасибо litoq
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
29.04.2011, 19:41 | 12 |
LedZeppelin, В функцию передаётся не массив, а только лишь адрес первого элемента. Поэтому все изменения, произведённые над переданным в функцию массивом внутри этой функции, отражаются на реальном массиве.
1
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
|
29.04.2011, 21:31 [ТС] | 13 |
silent_1991
Я учту это, спасибо.
0
|
Модератор
12459 / 7483 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
29.04.2011, 23:03 | 14 |
А меня одного смущает, что объявление
подразумевает массив из 7 + 1 символов, а к нему ещё приделывается? То есть выход за границу массива...
0
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
|
30.04.2011, 19:56 [ТС] | 15 |
easybudda
А что разве функция strcat() не добавляет новые индексы автоматически (куда она тогда помещает новые символы ?) ? И если так тогда как предусматреть это?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
30.04.2011, 20:04 | 16 |
LedZeppelin, какой там автоматически, это же вам не std::string. Элементы помещаются, как, по идее, и надо, в память, следующую за последним фактическим элементом массива. Только вот как на это отреагирует программа - не определено. Может, она отработате на этот раз без ошибок, может повиснуть сразу при попытке записи в неправильную область памяти, а может отказать в совершенно другом месте. Таковы последствия выхода за пределы массива.
Добавлено через 23 секунды Выделять под строку память заведомо большего размера, например.
1
|
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
|
||||||
30.04.2011, 20:23 [ТС] | 17 | |||||
silent_1991,
если дописать:
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
30.04.2011, 21:07 | 18 |
LedZeppelin, ничего не добавилось, вы просто вышли за пределы массива. Память не обрывается на конце массива, а продолжается дальше, вот в неё запись и происходит. В С/С++ предполагается, что программист сам будет следить за такими ситуациями.
Не по теме: +1 случайно жамкнул)))
0
|
30.04.2011, 21:07 | |
30.04.2011, 21:07 | |
Помогаю со студенческими работами здесь
18
Область видимости Область видимости Область видимости в С++ Область видимости Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |