можно ли в Си....?
array = newplace + 1
int a[10];
int *b;
b = &a[1];
b[-1] = 0;
Таким образом получаем массив b к которому можно обращаться с "-1" го по 8 элементы
Да, у тебя тоже правильно. Общий смысл таков - переместить указатель на первый элемент массива.
Обоим спасибо
a+i адресная арифметика
int a[n+1],*b=a+1;
при обращение к b получаем *(b+i) => *(a+1+i) => a[i+1]
при b[-1] ты обращеешься к a[0]
при b - a[i+1]
при b[n-1] - a[n]
а если массив двумерный?
нужно каким то образом сделать чтобы все элементы всех массивов с индексом "-1" равнялись бы 0.Совсем всех?
Это возможно вообще, ведь нумерация в си-массивах строго с нуля, или я ошибаюсь?
В C нет массивов, особенно двумерных.
int a[n][m];
b=a[1]+1;
мб что-то в этом роде
1. их размер должен быть известна во время компиляции (c GNU-расширениями -- может быть известен в момент входа в функцию, если массив выделяется на стеке)
2. при передаче в фунцию все атрибуты массива теряются, остаётся только указатель, т.е. функции, обрабатывающей массив произвольного размера не может быть
В C нет массивов, особенно двумерных.
можно переписать malloc, calloc и free - тогда это будет верно для всех динамических массивов, для статических без извратов (типа того что написал ) не получится.
переписывать стандартную библиотеку не изврат?
void* my_fucking_malloc(size_t size);
#define malloc my_fucking_malloc
и т.д.
Ты уверен, что после этого все будет корректно работать?
ну если ещё free корректно переопределить, разумеется.
Оставить комментарий
tel7432545
нужно каким то образом сделать чтобы все элементы всех массивов с индексом "-1" равнялись бы 0.Это возможно вообще, ведь нумерация в си-массивах строго с нуля, или я ошибаюсь?