Почему указателю присваивается мусор в строке "*range = array", а не адрес указателя array?
#include <stdlib.h>
#include <stdio.h>
int proper(int **proper, int mini, int maxi)
{
int *array;
int dlin;
int i;
int *g;
i = 0;
dlin = -mini + maxi;
if (mini >= maxi)
{
array = NULL;
}
else
{
array = (int*)malloc(dlin * sizeof(int));
}
while (i < dlin)
{
array[i] = mini;
i++;
mini++;
}
*proper = array;
return i;
}
int main()
{
int w[14] = {21, 14, 20};
int *k = w;
int o = 0;
int g = 0;
printf("%i\n", proper(k, 0, 15));
while (o <= 2)
{
printf("%i\n", f[o]);
o++;
}
}
Ответы (1 шт):
Меня не интересует, что происходит дальше с r. Я не понимаю поведение указателей в данной ситуации
Тогда почему вы утверждаете, что ничего не записывается? :) Сейчас вы записываете указатель, преобразуя его в int, по адресу, хранящемуся в r, т.е. в массив f.
Убедиться в этом можно, вставив вывод адреса
}
printf("%p\n",array);
*range = array;
и выводя f в шестнадцатеричном виде:
while (c <= 2)
{
printf("%0x\n", f[c]);
c++;
}
У меня в 64-разрядном варианте этот код дает
000001E24150CAE0
42
4150cae0
1e2
3
Как видите, совпадение адреса и содержимого первых двух элементов f полное.
Еще раз и очень медленно:
Вас не смущает, что вы должны передать в функцию
int**, а передаетеint*?
Подумайте над этим хорошенько... Намек, как поступать верно - даже если это вас не интересует - там же, в моем первом комментарии.