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];
};
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];
};
A jaki byłby rozmiar tej tablicy? Inaczej mówiąc, jaka jest wartość rozdz
?
Tę wartość chciałbym aby wpisywało się przez konsolę
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
.
Można jeszcze obejść problem tak:
template<std::size_t N>
struct foo {
int signal_size;
float signal[N];
};
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);
}
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.