1

Тема: В чому різниця між ініціалізацією і оголошенням змінних?

Цікавить відповідь на це питання

2 Востаннє редагувалося Пам'ять не може бути READ (03.02.2013 09:48:47)

Re: В чому різниця між ініціалізацією і оголошенням змінних?

keithfay написав:

Цікавить відповідь на це питання

Оголошення змінних - це коли ви вказуєте компілятору або інтерпритатору на те, щоб він зарезервував місце під змінну, а ініціалізація - це вже коли ви змінній присвоююте значення.
Приклад оголошення:

int a,b,c;
float n,m;

А ось ініціаізація:

a = 2;
b = 5;
c = 6;

Ось якось так.

Подякували: Replace3

3

Re: В чому різниця між ініціалізацією і оголошенням змінних?

keithfay написав:

Цікавить відповідь на це питання

Іноді можна заплутатися, коли ці поняття поєднуються в одному рядку (можливо для більшості мов):

int code = 2;

З.І: наочним, думаю, буде ще й приклад з SQL (для MS SQL Server):

DECLARE @myVar int; -- оголошення
SET @myVar = 100; -- ініціалізація

4 Востаннє редагувалося Torbins (03.02.2013 16:35:02)

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Як тут уже казали, оголошення змінної - це прохання до компілятора виділити під змінну ячейку пам'яті. У більшості компільованих мов програмування компілятор не дає ніяких гарантій щодо інформації, що опиниться в цій ячейці після виділення (це значно пришвидшує роботу програми). Відповідно значення змінної буде непередбачуваним. Щоб зробити його передбачуваним, потрібно цю змінну ініціалізувати, перш ніж почати з нею роботу.
Наступний код інколи працює правильно, а інколи ні, здогадайтеся чому:

function SumArray(arr: array of Byte): Integer;
var
  b: Byte;
  sum: Integer;
begin
  for b in arr do
    sum := sum + b;
  Result := sum;
end;

5 Востаннє редагувалося Пам'ять не може бути READ (03.02.2013 16:42:05)

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Це через розмір масиву ?
І доречі, що то за змінна Result.

6 Востаннє редагувалося Ярослав (03.02.2013 21:30:33)

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Torbins написав:

Наступний код інколи працює правильно, а інколи ні, здогадайтеся чому:

Якщо b виступає в ролі індексу для масиву arr, то будучи не ініціалізованою - може бути будь-яким, допустимим для свого типу, числом і елементарно бути за значенням більше, ніж найбільший індекс масиву, так?

7

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Змінна sum має отримати стартову ініціалізацію перед запуском циклу.

8

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Hanter написав:

І доречі, що то за змінна Result.

Здається, так у Паскалі позначають альтернативу конструкції

return  sum;

у С/С++.

9 Востаннє редагувалося Torbins (04.02.2013 19:45:41)

Re: В чому різниця між ініціалізацією і оголошенням змінних?

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;
Подякували: Очі.завидющі1

10

Re: В чому різниця між ініціалізацією і оголошенням змінних?

Змінна b у даному разі описує цикл руху колекцією елементів - foreach, по суті. keithfay, думаю, саме це вас мало дещо ввести в оману, оскільки С++ патріархальних стандартів (а ви саме її активно вивчали останні кілька місяців :)) не має конструкції foreach - вона з'явилася лише з приходом стандарту C++0x (2011). А попередні альтернативи (алгоритм з STL, макроси у Qt та Boost тощо) навряд чи вивчаються навіть у ВУЗах.