можно ли в Си....?

tel7432545

нужно каким то образом сделать чтобы все элементы всех массивов с индексом "-1" равнялись бы 0.
Это возможно вообще, ведь нумерация в си-массивах строго с нуля, или я ошибаюсь?

evgen5555

newplace = calloc(N + 1)
array = newplace + 1

Elina74

Вообще-то можно.


int a[10];
int *b;
b = &a[1];
b[-1] = 0;


Таким образом получаем массив b к которому можно обращаться с "-1" го по 8 элементы

Elina74

Да, у тебя тоже правильно. Общий смысл таков - переместить указатель на первый элемент массива.

tel7432545

поподробнее можно?
Обоим спасибо

teonazoi

В си операция a эквивалентна *(a+i)
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]

tel7432545

а если массив двумерный?

VitMix

нужно каким то образом сделать чтобы все элементы всех массивов с индексом "-1" равнялись бы 0.
Это возможно вообще, ведь нумерация в си-массивах строго с нуля, или я ошибаюсь?
Совсем всех?

abrek

В C нет массивов, особенно двумерных.

teonazoi

Я так понимаю под двумурним массивом имеется ввиду память, где строки массива хранятся друг за другом.

int a[n][m];
b=a[1]+1;


мб что-то в этом роде

abrek

Такие массивы действительно есть, но они не совсем настоящие:
1. их размер должен быть известна во время компиляции (c GNU-расширениями -- может быть известен в момент входа в функцию, если массив выделяется на стеке)
2. при передаче в фунцию все атрибуты массива теряются, остаётся только указатель, т.е. функции, обрабатывающей массив произвольного размера не может быть

VitMix

В C нет массивов, особенно двумерных.

freezer

можно переписать malloc, calloc и free - тогда это будет верно для всех динамических массивов, для статических без извратов (типа того что написал ) не получится.

teonazoi

переписывать стандартную библиотеку не изврат?

freezer



void* my_fucking_malloc(size_t size);
#define malloc my_fucking_malloc


и т.д.

Dasar

Ты уверен, что после этого все будет корректно работать?

Chupa

а в чём может быть проблема, кроме того, что память чуть раньше может кончиться?
ну если ещё free корректно переопределить, разумеется.
Оставить комментарий
Имя или ник:
Комментарий: