TransWikia.com

Адреса в памяти

Stack Overflow на русском Asked by masya on January 1, 2022

возник вопрос.
С помощью аллокатора я создаю динамическую память под массив "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] == '') {
            continue;
        } 
        printf("[Число]: %d [Адрес]: %pn",def[i], &def[i]);

    }
    printf("n[Адрес указателя]: %pn", &def);
    printf("[Адрес где хранится нулевой элемент массива]: %pn", def);

    free(def);
    
    return 0;
}

2 Answers

адрес памяти которую я выделил - это и есть адрес указателя ?

Нет.

Адрес выделенной памяти - это значение указателя. А адрес указателя - это адрес самого указателя и к выделенной памяти он никакого отношения не имеет. В данном случае, это адрес в стеке.

Answered by Qwertiy on January 1, 2022

Ну давайте по порядку:

С помощью аллокатора я создаю динамическую память

Память вы не создаете, она уже создана на фабрике в Китае, память вы выделяете ну или точнее система вам выделяет.

все элементы массива я переношу в указатель "def"

Не в указатель, а по адресу в указателе.

Нет, адрес памяти которую вы выделили хранится в указателе. Указатель можно рассматривать как числовую переменную для хранения адресов, у этой переменной тоже есть свой адрес не связанный с выделенной памятью. Пример:

int * pointer = (int *)malloc(4 * sizeof(int));
int ** pointer_of_pointer = &pointer;     // адрес локальной переменной pointer
free(pointer);

Answered by Cerbo on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP