Перейти к содержимому

Как обнулить переменную c

  • автор:

Удалить переменную в теле программы Си

Я объявляю статическую переменную counter в начале программы в двух первых функциях она нужна, а в третьей она не нужна. Можно ли ее как-то удалить?

Перемещено beastie из general

Caesium137
10.05.19 10:54:27 MSK
1 2 →

Во-первых, в development. Во-вторых, Это что, клуб изучения Си?

XMs ★★★★★
( 10.05.19 10:56:30 MSK )

Статическую нет, выделяй динамически, если переменная — экземпляр большой структуры, если это какой-нибудь int, то ваще забей.

Не, поизвращаться на самом деле можно, это же си, но ты что-то делаешь не так. Зачем тебе её удалять и что ты вообще под этим понимаешь?

DELIRIUM ☆☆☆☆☆
( 10.05.19 10:56:32 MSK )
Последнее исправление: DELIRIUM 10.05.19 10:58:55 MSK (всего исправлений: 1)

Ответ на: комментарий от XMs 10.05.19 10:56:30 MSK

Да ладно тебе агриться, с каких пор тут вопросы по сям запрещены?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:00:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 10:56:32 MSK

Чтобы осталось больше памяти

Caesium137
( 10.05.19 11:00:26 MSK ) автор топика

Я объявляю статическую переменную counter в начале программы

Интересно, что ты понимаешь под «объявляю» и «статическую». Как ты понимаешь это физически?

Deleted
( 10.05.19 11:00:32 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:00:32 MSK

static int counter

Caesium137
( 10.05.19 11:01:00 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:00:26 MSK

Сколько памяти она занимает и сколько у тебя есть? У тебя что, микроконтроллер?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:01:32 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:01:32 MSK

Да, микроконтроллер Arduino

Caesium137
( 10.05.19 11:02:01 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Ты экономишь 4 байта?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:02:12 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Вопрос явно не понят. Что происходит физически?

Deleted
( 10.05.19 11:02:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:02:12 MSK

А почему бы и нет?

Caesium137
( 10.05.19 11:02:53 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:02:53 MSK

Потому, что твоё последнее сообщение весит больше))

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:03:46 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:03:46 MSK

Ну, так можно или нет?

Caesium137
( 10.05.19 11:04:27 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:04:27 MSK

Подсказываю: «объявление» — это выделение памяти, где произойдёт это выделение с учётом static?

Deleted
( 10.05.19 11:06:40 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK
Caesium137
( 10.05.19 11:07:27 MSK ) автор топика
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK

Это вообще возможно?

Caesium137
( 10.05.19 11:08:31 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:07:27 MSK

Фактически в «теле» процесса. Пока процесс не завершён, ты ничего назад не получишь.

Deleted
( 10.05.19 11:08:49 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Значит, так сделать нельзя?

Caesium137
( 10.05.19 11:11:17 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:11:17 MSK

Как мне известно, нельзя. Физически не получится.

Deleted
( 10.05.19 11:12:14 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Ну переписать область в сегменте данных можно.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:12:18 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Можешь дать пример кода?

Caesium137
( 10.05.19 11:12:58 MSK ) автор топика
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Ну переписать область в сегменте данных можно.

Deleted
( 10.05.19 11:13:12 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:13:12 MSK

Так он так и не ответил, что он понимает под освободить. Он видимо хочет переиспользовать память, переписать это и означает.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:15:34 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:12:58 MSK

Нет, гугли. И учти, что это будет системно-зависимо.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:16:15 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:15:34 MSK
Deleted
( 10.05.19 11:16:43 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:16:43 MSK

Ну тогда ой) вот что я нашёл на со

Assuming you are using gnu tools (gcc, binutils) if you look at the linker scripts the embedded folks use like the gba developers and microcontroller developers using roms (yagarto or devkit-arm for example). In the linker script they surround the segments of interest with variables that they can use elsewhere in their code. For rom based software for example you specify the data segment with a ram AT rom or rom AT ram in the linker script meaning link as if the data segment is in ram at this address space, but also link the data itself into rom at this address space, the boot code then copies the .data segment from the rom to the ram using these variables. I dont see why you couldnt do the same thing to have the compiler/linker tools tell you where stuff is then runtime use those variables to grab the data from memory and save it somewhere to hybernate or shut down and then restore that data from wherever. The variables you use to perform the restore of course should not be part of the .data segment or you trash the variables you are using to restore the segment.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:18:54 MSK )

Я поставил стул, чтобы сидеть, когда читаю и ем, но когда сплю, он не нужен. Можно ли его как-то выкинуть?

anonymous
( 10.05.19 11:20:27 MSK )
Ответ на: комментарий от anonymous 10.05.19 11:20:27 MSK

Не совсем корректная аналогия, стул ты можешь выкинуть хоть в окно в любой момент.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:22:24 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:22:24 MSK

стул ты можешь выкинуть хоть в окно в любой момент.

Дополним аналогию. Стул заставлен со всех сторон шкафами. )

Deleted
( 10.05.19 11:23:59 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:23:59 MSK

Шкафы можно отодвинуть)

C# Как мне удалить из памяти ненужную переменную типа int, которая уже проинициализирована?

Переменная типа int расположена в стеке и занимает 4 байта. В этом случае сборщик мусора ей не помощник. Она будет удалена как только код покинет область её видимости. 4 байта в куче? Не смешите людей)

Остальные ответы

там же, вроде, автоматический сборщик мусора. просто не используйте эту переменную и вообще уйдите за область её видимости, сборщик мусора всё сделает сам.

Как обнулить переменную c

В Си новичок, подскажите пожалуйста. Есть програмка, которая должна выводить среднее арифметическое, данные вводятся с помощью цикла scanf. Вопрос, как остановить действие цикла не дав оператору scanf значение?

Вот, собственно, сам код, не судите строго, однако от объективной критики не откажусь:

/* sariph.c - прогрмма выведения среднего арифметического */ #include int main () < int i, n = 1, a, max, out, d; printf ("Введите числа: ", n); scanf ("%d", &max); do < scanf ("%d", &a); max = max + a; n = n + 1; >while (a = d); out = max / n; printf ("%d\n", out); return 0; >

Регистрация: 19.12.2008
Сообщений: 5,788

Не очень понял сам вопрос. Остановить действие цикла, то есть выйти из него, можно с помощью оператора break.
А в данном случае нужно предусмотреть условие выхода. Например, если пользователь вводит ноль.

#include int main () < int n = -1, a, max=0; double out; do < n++; scanf ("%d", &a); max = max + a; >while (a); out = (double)max / n; printf ("%lf\n", out); return 0; >

Переменную out нужно сделать вещественного типа, иначе значение будет не точным.
max нужно инициализировать нулем.

Еще можно заранее запрашивать количество слагаемых, тогда ноль тоже будет учитываться.

А можно вообще читать число как строку, а потом преобразовывать в число. Тогда выход из цикла можно осуществлять при неудачной конвертации.

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

Обнуление переменной

Допустим есть переменная Q типа string.В ней находится строка.Как можно очистить переменную от этой строки и сделать её пустой?

3 ответа

25 мая 2005 года
4.8K / / 20.01.2000

Originally posted by Driv3r
Допустим есть переменная Q типа string.В ней находится строка.Как можно очистить переменную от этой строки и сделать её пустой?

25 мая 2005 года
465 / / 01.04.2005

Originally posted by Driv3r
Допустим есть переменная Q типа string.В ней находится строка.Как можно очистить переменную от этой строки и сделать её пустой?

могу ошибиться, но не Q.erase()?

25 мая 2005 года
4.8K / / 20.01.2000
Originally posted by Mоngооsе
могу ошибиться, но не Q.erase()?

basic_string::clear
Erases all elements of a string.

basic_string::erase
Removes an element or a range of elements in a string from specified positions.

Но при дефолтных параметрах

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *