У меня проблема с использованием указателей и массивов в C, задача проста, у меня есть функция, которая преобразует цифры в массив int, а затем отправляет обратно указатель на этот массив. На данный момент мне нужно назначить этот указатель в массив указателей.
То, что я получаю, - это набор чисел в последовательности, поэтому я полагаю, что это адреса указателей, проблема в том, что мне нужно увидеть значение, хранящееся в этих массивах, а не адреса...
Программа компилируется без предупреждений и ошибок.
//-----Function to convert single digits-----
int* convertToBits(int digitToConvert)
{
int binaryDigit[8];
int k;
for (int i = 7; i >= 0; i--) {
k = digitToConvert >> i;
if (k & 1) {
binaryDigit[i] = 1;
//printf("1");
}
else {
binaryDigit[i] = 0;
//printf("0");
}
}
return binaryDigit;
}
//-----Function to store single digits-----
void setupDigit(int temperature)
{
int* displayDigit[4];
if (temperature >= 0)
{
for (int i = 0; i < 4; i++) {
//displayDigit[i] = convertToBits(takeSingledDigit(temperature));
int* pointTo = convertToBits(takeSingledDigit(temperature));
displayDigit[i] = pointTo;
for (int j = 0; j < 8; j++) {
printf("%d", *(displayDigit[i]) + j);
}
printf("\n");
temperature /= 10;
}
}
else
{
for (int i = 0; i < 3; i++) {
//displayDigit[i] = convertToBits(takeSingledDigit(temperature));
int* pointTo = convertToBits(takeSingledDigit(temperature));
displayDigit[i] = pointTo;
for (int j = 0; j < 8; j++) {
printf("%d", *(displayDigit[i]) + j);
}
printf("\n");
temperature /= 10;
}
displayDigit[3] = minusChar;
}
int binaryDigit[8];
, когда функция возвращается? (подсказка: пуф!) Вы не можете вернуть указатель на локально объявленный массив. По возвращении стек функций уничтожается (освобождается для повторного использования). Ваш локально объявленный массив жил в этом стеке функций. Указатель, который вы возвращаете -- теперь указывает на неверный адрес -- пуф! Либо укажитеbinaryDigit
в качестве параметра вашей функции, либо выделите с помощьюmailloc
и верните указатель. - person David C. Rankin   schedule 16.02.2020return binaryDigit
дает неопределенное поведение (возвращенный адрес недействителен вне функции. Могут быть и другие проблемы, но эта действительно выделяется. - person John3136   schedule 16.02.2020