мда. нескоро оно ещё работать начнёт)
мда. нескоро оно ещё работать начнёт)
А можно пионерский вопрос участникам забега (мне простительно, я не программист же :) )?
Имеется код:
В приведенной конструкции чему равно (bufpool+NBUFS)? "bufpool+2" или "bufpool+2*sizeof(blkbuf_t)"?Код:#define NBUFS 2
typedef struct s_blkbuf {
.........................
} blkbuf_t, *bufptr;
blkbuf_t bufpool[NBUFS];
.........................
bufptr bp = bufpool;
while (bp < bufpool+NBUFS) {
.........................
++bp;
}
И "++bp" увеличивает значение указателя (по факту, адрес) на единицу или на sizeof(blkbuf_t)?
Как вообще они сравнивают указатель на структуру с массивом? По абсолютным величинам адреса? Или как?
Когда к указателю прибавляют еденицу, то получается указатель на следующий элемент, а не следующий байт.
В Си так:
1) Массив - это де факто указатель на первый элемент массива.
2) Прибавление числа к указателю прибавляет sizeof(тип, на который указываем)
Поэтому
int array[10];
int* array2 = array; // работает без проблем
print(array2[5]) - пятый элемент массива. Ну и что, что указатель.
array2 + 3 // указатель на третий элемент массива
array + 3 // то же самое
bufpool+NBUFS адрес конца буфера
Единственная разница между массивом и указателем - это sizeof. sizeof массива - объем занятой массивом памяти, sizeof указателя - размер указателя (обычно разрядность архитектуры)
массив - константный адрес
указатель - переменная, хранящая адрес
---------- Post added at 18:12 ---------- Previous post was at 18:09 ----------
адреса сравниваются также, как и беззнаковые целые
Ну вот! https://github.com/salextpuru/FUZIX/...a93060e89df206
Стабильно запускается. Показывет 1Мбайт (64 страницы) для процессов + 64 для ядра.
Теперь приступим к ваянию виртуального диска.