Имя массива это адрес первого элемента или указатель на его первый элемент в Си?
Привет!
Есть код: int arrOne[5] = {1,2,3,4,5};
Тут arrOne это адрес его первого элемента ? Или указатель на его первый элемент ? Или в указатель он превращается только когда это нужно (к примеру в арифметике адресов)? Или оба варианта верны ?
Немного другая тема: int arrTwo[3][2] = {{1,2}, {3,4}, {5,6}};
А с двумерным массивом как ? Тут arrTwo это адрес первого элемента или указатель на его первый элемент т.е {1,2}? И получается arrTwo это адрес самого первого элемента {1,2} или же адрес первого элемента первого подмассива т.е {1}?
Адрес от указателя ? -> адрес это цифры по которым хранится переменная, а указатель эти самые цифры хранит.
int arrTwo[3][2] = {{1,2}, {3,4}, {5,6}};
arrTwo - это начало массива т.е первый элемент (имеется ввиду что адрес, вот этого элемента {1,2}) или адрес элемента подмассива т.е {1} ?
у вас массив интов же. Значит ЭЛЕМЕНТ массива - это 1. А не 1,2
int arrTwo[3][2] = {{1,2}, {3,4}, {5,6}};
А почему массив интов ? Если массив хранит не инты, а массивы (в которых уже инты)
Ну хорошо в консоль выведу значение arrOne, и получу что-то типо 23454323456 или (-2456748324), это если без %p, а с ним уже более менее красиво. И это будет адрес на начало массива, хорошо но это же просто адрес т.е, так, если вы скажите нет, то я не пойму почему?
А сам указатель же хранит уже адреса ? Нет?
int a = 5;
int * ptr_a = &a;
Тут у a есть адрес к примеру x0239462fff83 - и это же типо просто символы, а указатель эти самые символы хранит ?
Можете пожалуйста сказать в чем я ошибся ?
GavriKos, в С и в C++ многомерные массивы -- это массивы массивов. Т.е. int arrTwo[3][2] = {{1,2}, {3,4}, {5,6}}; -- это массив из 3 элементов, каждый из которых -- массив из 2 int. Подробнее например здесь.
Имя массива - это строка в коде программы, по которой компилятор определяет, что работает с вот этой конкретной областью памяти. Зная ее начальный адрес и применяя адресную арифметику для нахождения адреса хоть линейного, хоть двумерного элемента (там просто arr[x][y] превращается в начальный адрес + (x * второй размер массива + y) * размер переменной. Массивы в С - это всегда плоская область памяти, размерность существует только для программиста, для удобства).
Указатель - это и есть переменная, в которой хранится адрес другой переменной. Например, первого элемента массива. Объявление указателя вместо целого числа просто позволяет компилятору понять, что программист именно это и имел в виду, и не ругаться на подозрительные операции.