Адреса в памяти
возник вопрос. С помощью аллокатора я создаю динамическую память под массив "buf", далее все элементы массива я переношу в указатель "def", который в свою очередь указывает на область памяти который я и выделил.
Интересует, адрес памяти которую я выделил - это и есть адрес указателя ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int *def;
int buf[] = {3,4,7,3,2,3,4};
def = (int *)malloc(sizeof(buf));
memcpy(def, buf, sizeof(buf));
for(int i = 0; i < sizeof(def); i++) {
if(def[i] == '\0') {
continue;
}
printf("[Число]: %d [Адрес]: %p\n",def[i], &def[i]);
}
printf("\n[Адрес указателя]: %p\n", &def);
printf("[Адрес где хранится нулевой элемент массива]: %p\n", def);
free(def);
return 0;
}
Ответы (2 шт):
Ну давайте по порядку:
С помощью аллокатора я создаю динамическую память
Память вы не создаете, она уже создана на фабрике в Китае, память вы выделяете ну или точнее система вам выделяет.
все элементы массива я переношу в указатель "def"
Не в указатель, а по адресу в указателе.
Нет, адрес памяти которую вы выделили хранится в указателе. Указатель можно рассматривать как числовую переменную для хранения адресов, у этой переменной тоже есть свой адрес не связанный с выделенной памятью. Пример:
int * pointer = (int *)malloc(4 * sizeof(int));
int ** pointer_of_pointer = &pointer; // адрес локальной переменной pointer
free(pointer);
адрес памяти которую я выделил - это и есть адрес указателя ?
Нет.
Адрес выделенной памяти - это значение указателя. А адрес указателя - это адрес самого указателя и к выделенной памяти он никакого отношения не имеет. В данном случае, это адрес в стеке.