Мне трудно предложить этот вопрос многим людям.если кто-то здесь может помочь мне пролить некоторый свет на это, я был бы очень признателен, так как это было основным препятствием на протяжении почти трех лет с моей проблемой.
, если вы знаете свои массивы и память, чем пропустить последний абзацдля большого вопроса, но если вы прочитаете это, это может помочь вам понять, почему и с какими понятиями я пытаюсь понять.
, поэтому у нас есть инициализированный массив
int main(){
int x=10;
int arr[x]={3,5,1,9,4,17,2,12,6,8};
для доступа5-й элемент массива, мы распечатали бы его следующим образом
printf("%d",arr[4]);
Теперь мой первый вопрос вращается вокруг этого процесса.функция printf определяет, что я хочу напечатать целое число, и в качестве каталога я даю ему имя массива / адрес первого элемента и указываю, что мне нужен 4-й элемент массива.
информация, которую яДо сих пор заставляет меня поверить, что каждое целое число занимает 4 байта памяти.обычно, в классной комнате, когда профессор объясняет это, они рисуют это на доске
0 1 2 3 4 5 6 7 8 9
[1000][1004][1008][1012][1016][1020][1024][1028][1032][1036]
{ 3 5 1 9 4 17 2 12 6 8 }
сейчас, это все просто, но в то время, когда я изучал, как работают компьютеры, я понял одну очень важную вещь, компьютерыочень глупо, и поэтому мы их программируем, поэтому, пожалуйста, потерпите меня.
вопрос 1: это точное представление о памяти?Вот как почти все на YouTube, в классах и т. д. рисуют картинку, последовательный список, начинающийся с 1000 и увеличивающийся на +4, что, если у меня два массива одинакового размера?они не могут занимать одни и те же адреса памяти, так как я могу отслеживать где.
вопрос 2: я понимаю, что arr [4];относится к значению 4-й позиции массива.но это обр [4], что это?4. это 4 хранится где-то в памяти?какой тип данных это 4?это тоже указатель?Насколько я понимаю, это расширение массива указателей, которое меня смущает.поскольку массив указывает на 1-й элемент в позиции 0, как указатель «4» сосуществует внутри указателя?как выглядит процесс для компьютера?я предполагаю, что это не проблема, потому что 4 является аргументом указателя и поэтому может существовать в указанном указателе массива.
но процесс?это, перейти к arr [0] и затем считать 4 байта от позиции 0 4 раза?какой адрес занимает позиция 0?я знаю, что в учебных целях это визуализируется как начиная с 1000, но всегда ли это так?почему бы не обратиться к 1036 и отсчитать 4 оттуда?я знаю, что где-то читал, что адреса памяти разделяют память, убедившись, что если символ (1 байт) хранится в памяти рядом с целым числом (4 байта), то между ними есть пробелы в памяти, чтобы все это делилось на 2.
Итак, теперь перейдем к моему последнему вопросу, о котором я ничего не могу найти в Интернете.Могу ли я как-то сказать компьютеру назначить длину памяти от индекса 0 - n переменной?возможно я спрашиваю неправильно, поэтому позвольте мне перефразировать.Есть ли тип данных, который определяет длину памяти, а не положение?я знаю, что мы можем получить доступ к количеству памяти, которое занимает определенная переменная, но для этого мы ссылаемся на переменную и в результате получаем память.я хочу назначить длину памяти переменной.