Предположим, что в любой функции C указатель уже объявлен, но ему еще не присвоено значение. Мы будем int для наших примеров.
int *ptr;
Цель функции - не назначать ptr
динамической памяти в куче, поэтому нет вызова malloc
. Вместо этого мы хотим, чтобы он указывал на массив фиксированного размера n
. Я знаю, что мог бы сделать это так:
int arr[n];
ptr = arr;
Однако код может стать очень запутанным и трудным для чтения, если нам нужно будет делать это много раз в функции, т. Е. Структура многих полей указателей должна указывать на массив фиксированной длины. Есть ли лучший способ сделать это в одной строке? Я думал о чем-то похожем на ниже, но это выглядит слишком двусмысленным и не компилируемым:
int *ptr;
// Many other things happen in between...
ptr[n];
*** **** EDIT 1014 *
Здесь приведенная ниже дополнительная информация может помочь направить некоторые ответы (не говоря о том, что текущие ответы не подходят). В моем случае использования указатели объявляются в структуре, а в функции я присваиваю указатели массиву. Я хочу знать, есть ли более простой способ сделать это, чем в приведенном ниже коде (все указатели указывают на массив фиксированной длины):
struct foo {
int* a;
short* b;
char* c;
...
};
void func(void) {
struct foo f;
int n = ...;
int tempArr1[n];
f.a = tempArr1;
short tempArr2[n];
f.b = tempArr2;
char tempArr3[n];
f.c = tempArr3;
...
}