Tablica ze zmienną w strukturze

0

Czy można się w strukturze stworzyć tablicę z ilością elementów, która będzie określona parametrem tej struktury?

struct sygnal
{
	int rozdz;
	int rozmiarsygnalu;
	float sygnal[rozdz];
};
2

A jaki byłby rozmiar tej tablicy? Inaczej mówiąc, jaka jest wartość rozdz?

0

Tę wartość chciałbym aby wpisywało się przez konsolę

6

Nie podałeś języka, więc odpowiedzi nie da się jednoznacznie udzielić.

W C jest coś takiego jak flexible array member:

struct foo
{
    int rozdz;
    int rozmiarsygnalu;
    float sygnal[];
};

W C++ się nie da. Ale za to masz std::vector.

0

Można jeszcze obejść problem tak:

template<std::size_t N>
struct foo {
	int signal_size;
	float signal[N];
};
1

No to jeszcze do kompletu masz taką konstrukcję ale czy będzie adekwatna to pytanie o szerszym kontekście:

#include <memory>

struct sygnal
{
    int rozdz;
    int rozmiarsygnalu;
    std::unique_ptr<float[]> sygnal;
};

int main() {
    struct sygnal s;
    s.sygnal = std::make_unique<float[]>(10);
}
0

Możesz stworzyć sobie funkcję, która będzie alokować potrzebną pamięć:

#include <malloc.h> // lub <stdlib.h>
struct sygnal
{
    int rozdz;
    int rozmiarsygnalu;
    float *sygnal;
};

void Set(struct sygnal& s, int x) {
       s.rozmiarsygnalu = x;
       s.sygnal = (float*) malloc (x*sizeof(float)); 
       // itd...
}

void Delete(struct sygnal& s) {
       free(s.sygnal);
}

int main ()
{
  sygnal s;
  int rozmiarsygnalu;

  printf("Podaj rozmiar sygnalu: ");
  scanf("%d", &rozmiarsygnalu;

  Set(s, rozmiarsygnalu);
  
  // ...

  Delete(s);
  return 0;
}

Jeśli piszesz w C++ to możesz skorzystać z new i delete, chociaż lepiej skorzystać zstd::vector tak jak wspomniał @kq dzięki temu nie będziesz się musiał przejmować np. zwalnianiem pamięci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1