Объявление массивов на языке c без начального размера

Напишите программу для обработки деталей температуры, как указано ниже.
- Введите количество дней для расчета. - Главная функция
- Входная температура в Цельсе - входная функция
- Преобразование температуры от Цельсия до Фаренгейта. - Отдельная функция
- найти среднюю температуру в Фаренгейте.

как я могу сделать эту программу без начального размера массива?

#include<stdio.h>
#include<conio.h>
void input(int);
int temp[10];
int d;
void main()
{
    int x=0;
    float avg=0,t=0;
    printf("\nHow many days : ");
    scanf("%d",&d);
    input(d);
    conv();
    for(x=0;x<d;x++)
    {
        t=t+temp[x];
    }
    avg=t/d;
    printf("Avarage is %f",avg);
    getch();
}
void input(int d)
{
    int x=0;
    for(x=0;x<d;x++)
    {
        printf("Input temperature in Celsius for #%d day",x+1);
        scanf("%d",&temp[x]);
    }
}
void conv()
{
    int x=0;
    for(x=0;x<d;x++)
    {
        temp[x]=1.8*temp[x]+32;
    }
}

Ответ 1

В C массивы и указатели тесно связаны. Фактически, по дизайну массив является просто соглашением синтаксиса для доступа к указателю на выделенную память.

Итак, в C утверждение

 anyarray[n] 

совпадает с

 *(anyarray+n)

Использование арифметики указателя.

Вам не нужно беспокоиться о деталях, чтобы заставить его "работать" , поскольку он предназначен для того, чтобы быть несколько интуитивным.

Просто создайте указатель и выделите память, а затем получите доступ к ней как к массиву.

Вот несколько примеров -

int *temp = null; // this will be our array


// allocate space for 10 items
temp = malloc(sizeof(int)*10);


// reference the first element of temp
temp[0] = 70;


// free the memory when done
free(temp);

Помните - если вы заходите за пределы выделенной области, у вас будут неизвестные эффекты.

Ответ 2

Массив без начального размера в основном представляет собой указатель . Чтобы динамически установить размер массива, вам нужно использовать функции malloc() или calloc(). Они будут выделять определенное количество байтов памяти.

В приведенном выше коде объявите temp как указатель int

int *temp;

Затем выделите место для него, используя malloc() или calloc(). Аргументом, который эти функции принимают, является количество выделяемых байтов. В этом случае вам нужно пространство для d ints. Так что...

temp = malloc(d * sizeof(int));

malloc возвращает указатель на первый байт в выделенном блоке памяти. Регулярные массивы - это просто указатели на первый байт в секционированном блоке памяти, что в точности соответствует temp. Таким образом, вы можете рассматривать указатель temp как массив! Например:

temp[1] = 10;
int foo = temp[1];
printf("%d", foo);

Выходы

10

Ответ 3

Вам нужно объявить temp как указатель int (вместо массива int). Затем вы можете использовать malloc в своем main (после первого scanf):

temp = malloc(d * sizeof(int));

Ответ 4

Если ваш компилятор поддерживает c99, просто используйте VLA (массив переменной длины). Используйте вот так:

void input(int);

 int d;
 void main()
 {
    int x=0;
    float avg=0,t=0;
    printf("\nHow many days : ");
    scanf("%d",&d);
    int temp[d];
    input(d);
    conv();
    for(x=0;x<d;x++)
    {
       t=t+temp[x];
    }
    avg=t/d;
    printf("Avarage is %f",avg);
    getch();
  }

Теперь temp[] определяется внутри main() после ввода даты.

Ответ 5

1-add #include<stdlib.h> в верхней части файла. Затем измените код conv() следующим образом:
2- изменить объявление temp следующим образом (глобальная переменная):

int *temp;

3- изменить input(int d) функцию следующим образом (протестировано на Visual Studio 2010):

  void input(int d)
    {
        int x=0;
        temp=(int*)malloc(sizeof(int)*d);
        for(x=0;x<d;x++)
        {
            printf("Input temperature in Celsius for #%d day",x+1);
            scanf("%d",&temp[x]);
        }
    }

Ответ 6

Выделяйте "массив" динамически в куче после чтения размера.

Ответ 7

Я ничего не изменил, чтобы вы могли видеть это ясно.

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>   //here
void input(int);
int *temp=0;  //here
int d;
void main()
{
    int x=0;
    float avg=0,t=0;
    printf("\nHow many days : ");
    scanf("%d",&d);
    temp=malloc(d * sizeof(int));  //here
    input(d);
    conv();
    for(x=0;x<d;x++)
    {
        t=t+temp[x];
    }
    avg=t/d;
    printf("Avarage is %f",avg);
    getch();
}
void input(int d)
{
    int x=0;
    for(x=0;x<d;x++)
    {
        printf("Input temperature in Celsius for #%d day",x+1);
        scanf("%d",&temp[x]);
    }
}
void conv()
{
    int x=0;
    for(x=0;x<d;x++)
    {
        temp[x]=1.8*temp[x]+32;
    }
}