Тема: В чому різниця між ініціалізацією і оголошенням змінних?
Цікавить відповідь на це питання
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Алгоритми та структури даних, технології → В чому різниця між ініціалізацією і оголошенням змінних?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Цікавить відповідь на це питання
Цікавить відповідь на це питання
Оголошення змінних - це коли ви вказуєте компілятору або інтерпритатору на те, щоб він зарезервував місце під змінну, а ініціалізація - це вже коли ви змінній присвоююте значення.
Приклад оголошення:
int a,b,c;
float n,m;
А ось ініціаізація:
a = 2;
b = 5;
c = 6;
Ось якось так.
Цікавить відповідь на це питання
Іноді можна заплутатися, коли ці поняття поєднуються в одному рядку (можливо для більшості мов):
int code = 2;
З.І: наочним, думаю, буде ще й приклад з SQL (для MS SQL Server):
DECLARE @myVar int; -- оголошення
SET @myVar = 100; -- ініціалізація
Як тут уже казали, оголошення змінної - це прохання до компілятора виділити під змінну ячейку пам'яті. У більшості компільованих мов програмування компілятор не дає ніяких гарантій щодо інформації, що опиниться в цій ячейці після виділення (це значно пришвидшує роботу програми). Відповідно значення змінної буде непередбачуваним. Щоб зробити його передбачуваним, потрібно цю змінну ініціалізувати, перш ніж почати з нею роботу.
Наступний код інколи працює правильно, а інколи ні, здогадайтеся чому:
function SumArray(arr: array of Byte): Integer;
var
b: Byte;
sum: Integer;
begin
for b in arr do
sum := sum + b;
Result := sum;
end;
Це через розмір масиву ?
І доречі, що то за змінна Result.
Наступний код інколи працює правильно, а інколи ні, здогадайтеся чому:
Якщо b виступає в ролі індексу для масиву arr, то будучи не ініціалізованою - може бути будь-яким, допустимим для свого типу, числом і елементарно бути за значенням більше, ніж найбільший індекс масиву, так?
Змінна sum має отримати стартову ініціалізацію перед запуском циклу.
І доречі, що то за змінна Result.
Здається, так у Паскалі позначають альтернативу конструкції
return sum;
у С/С++.
Bartash правий. Початкове значення змінної sum буде залежати від погоди над Сіднеєм, і може змінюватися при кожному новому виклику SumArray. А змінна b отримує значення одного з елементів масиву arr на кожній ітерації циклу, і тому завжди є ініціалізованою. Виправлена функція:
function SumArray(arr: array of Byte): Integer;
var
b: Byte;
sum: Integer;
begin
sum := 0; //!!!
for b in arr do
sum := sum + b;
Result := sum;
end;
Змінна b у даному разі описує цикл руху колекцією елементів - foreach, по суті. keithfay, думаю, саме це вас мало дещо ввести в оману, оскільки С++ патріархальних стандартів (а ви саме її активно вивчали останні кілька місяців ) не має конструкції foreach - вона з'явилася лише з приходом стандарту C++0x (2011). А попередні альтернативи (алгоритм з STL, макроси у Qt та Boost тощо) навряд чи вивчаються навіть у ВУЗах.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися