Как вывести переменную k?
Есть два кода в одном эта переменная выводится нормально в другом нет(почему?) алгоритм вроде один и тот же.
int* masa, * masb = NULL;
int cc , rr, k;
cout << "enter size of array" << endl << "rr: ";
cin >> rr;
cout << endl << "cc: ";
cin >> cc;
masa = (int*)malloc(rr * cc * sizeof(int));
for (int i = 0; i < rr; i++)
{
for (int j = 0; j < cc; j++)
{
*(masa + i * rr + j) = rand() % 20;
}
}
for (int i = 0; i < rr; i++)
{
for (int j = 0; j < cc; j++)
{
cout << *(masa+ i * rr + j) << "\t";
}
cout << endl;
}
//утворення масива що більший за 2
cout << endl;
for (int i = 0,k = 0; i < rr; i++)
for (int j = 0; j < cc; j++)
{
if (*(masa + i * rr + j) > 2)
{
masb = (int*)realloc(masb, (k + 1) * sizeof(int));
masb[k] = *(masa + i * rr + j);
k++;
}
}
cout << k;
Вот другой код в котором все работет
int* a; // Вказівник на масив, початкова адреса для зберігання елементів масиву
int* b = NULL; // Вказівник на масив, розмір якого не відомо завчасно
int i, j, rr, cc, k;
printf("Введіть кількість рядків масиву n \n"); scanf(" %d", &rr);
printf("Введіть кількість стовпчиків масиву m \n"); scanf(" %d", &cc);
a = (int*)malloc(rr * cc * sizeof(int)); // Виділення пам'яті під масив
printf("Введня елементів масиву \n");
for (i = 0; i < rr; i++)
for (j = 0; j < cc; j++)
*(a + i * cc + j) = rand() % 10; //або з клавіатури scanf("%d", a+i*cc+j);
printf("Друк елементів масиву \n");
for (i = 0; i < rr; i++) {
for (j = 0; j < cc; j++)
printf("%6d", *(a + i * cc + j));
printf("\n");
}
for (i = 0, k = 0; i < rr; i++)
for (j = 0; j < cc; j++)
{
if (*(a + i * cc + j) > 2)
{
b = (int*)realloc(b, (k + 1) * sizeof(int)); // Вказівник на новий
b[k] = *(a + i * cc + j);
k++;
}
}
cout << k;
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вот этот код
for (int i = 0,k = 0; i < rr; i++)
объявляет переменные i и k как локальные для тела цикла. Чем, собственно, все и поясняется. k в цикле и k после цикла — две разные переменные...