можно ли в Си....?
newplace = calloc(N + 1)
array = newplace + 1
array = newplace + 1
Вообще-то можно.
Таким образом получаем массив b к которому можно обращаться с "-1" го по 8 элементы
int a[10];
int *b;
b = &a[1];
b[-1] = 0;
Таким образом получаем массив b к которому можно обращаться с "-1" го по 8 элементы
Да, у тебя тоже правильно. Общий смысл таков - переместить указатель на первый элемент массива.
поподробнее можно?
Обоим спасибо
Обоим спасибо
В си операция a эквивалентна *(a+i)
a+i адресная арифметика
при обращение к b получаем *(b+i) => *(a+1+i) => a[i+1]
при b[-1] ты обращеешься к a[0]
при b - a[i+1]
при b[n-1] - a[n]
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. при передаче в фунцию все атрибуты массива теряются, остаётся только указатель, т.е. функции, обрабатывающей массив произвольного размера не может быть
1. их размер должен быть известна во время компиляции (c GNU-расширениями -- может быть известен в момент входа в функцию, если массив выделяется на стеке)
2. при передаче в фунцию все атрибуты массива теряются, остаётся только указатель, т.е. функции, обрабатывающей массив произвольного размера не может быть
В C нет массивов, особенно двумерных.

можно переписать malloc, calloc и free - тогда это будет верно для всех динамических массивов, для статических без извратов (типа того что написал ) не получится.
переписывать стандартную библиотеку не изврат?
void* my_fucking_malloc(size_t size);
#define malloc my_fucking_malloc
и т.д.
Ты уверен, что после этого все будет корректно работать?
а в чём может быть проблема, кроме того, что память чуть раньше может кончиться?
ну если ещё free корректно переопределить, разумеется.
ну если ещё free корректно переопределить, разумеется.
Оставить комментарий
tel7432545
нужно каким то образом сделать чтобы все элементы всех массивов с индексом "-1" равнялись бы 0.Это возможно вообще, ведь нумерация в си-массивах строго с нуля, или я ошибаюсь?