typedef struct {
float *numbers;
float val1;
float val2;
} Values;
Values val[16];
構造体の数値にメモリを割り当てるにはどうすればよいですか?
typedef struct {
float *numbers;
float val1;
float val2;
} Values;
Values val[16];
構造体の数値にメモリを割り当てるにはどうすればよいですか?
構造体の最初の要素で1つのfloatにスペースを割り当てたい場合は、次のようにします。
#include <stdlib.h>
/* ... */
val[0].numbers = malloc(1 * sizeof(float)); /* "1 * " for clarity... */
それがあなたの意図したことなら。
したがって、次のような動的メモリ割り当てを使用せずにこれを行うことができます。
typedef struct {
float *numbers;
float val1;
float val2;
} Values;
#define MAX_SIZE 16
int main() {
Values val[MAX_SIZE];
float myfloats[MAX_SIZE];
int i;
for(i=0;i<MAX_SIZE;i++) {
val[i].numbers=&myfloats[i];
}
return 0;
}
しかし、1つのフロートへのポインターを持つ構造が必要な理由は考えられません。
名前に基づいて、の配列をポイントし'numbers'
たいと思います。そうであれば、次のように実行できます。'numbers'
floats
#include <malloc.h>
typedef struct {
float *numbers;
float val1;
float val2;
} Values;
#define MAX_SIZE 16
int main() {
Values val[MAX_SIZE];
size_t numberOfFloats = 10;
int i;
// for each of the members of the val array
for(i=0;i<MAX_SIZE;i++) {
// allocate using calloc (this will set all of the floats to 0.0)
val[i].numbers=calloc(numberOfFloats,sizeof(float));
// check the allocation worked...
if(!val[i].numbers) {
// insert proper error handling here.
printf("oops\n");
return -1;
}
}
// you access the variables like this
for(i=0;i<MAX_SIZE;i++) {
int number;
for(number=0; number < numberOfFloats; number++) {
printf("Value %d, Number %d = %f\n",i,number,val[i].numbers[number]);
}
}
// don't forget to play nice and clean up afterwards
for(i=0;i<MAX_SIZE;i++) {
free(val[i].numbers);
}
return 0;
}