Главная страница
Навигация по странице:

  • Постановка задачи Наберите текст программы, представленный ниже. Имена переменных измените на свои.

  • Контрольные вопросы 1. Что такое указатель 2. Какой объем памяти занимает указатель 3. Что является значением переменной-указателя

  • 5. Что такое NULL 6. Что такое указатель на void Зачем нужны такие указатели 7. Какие операции допустимы при работе с указателями

  • 10. Можно ли получить адрес указателя

  • 16. Как описать указатель на начало массива

  • Практическая работа №1_Указатели. Практическая работа указатели


    Скачать 390.83 Kb.
    НазваниеПрактическая работа указатели
    Дата28.05.2022
    Размер390.83 Kb.
    Формат файлаpdf
    Имя файлаПрактическая работа №1_Указатели.pdf
    ТипПрактическая работа
    #554559

    ПРАКТИЧЕСКАЯ РАБОТА № 1. УКАЗАТЕЛИ
    Цель работы – познакомиться с адресацией памяти, научиться правильно использовать указатели различных типов.
    Операции с указателями
    Получение адреса, разыменование, присваивание значения указателя другому указателю того же типа, сложение и вычитание указателя и целого.
    Постановка задачи
    Наберите текст программы, представленный ниже.
    Имена переменных измените на свои.
    Запустите программу:
    - посмотрите, по каким адресам располагаются переменные, какой объем памяти они занимают и начертите схематичное расположение элементов в памяти;
    - отметьте стрелками, куда указывают указатели;
    - отметьте, куда стали указывать указатели после изменения их значений, обведите (подчеркните, раскрасьте или как-то еще) адресуемые области для каждого указателя, объясните, как получаются выведенные программой значения;
    - отметьте, куда стали указывать указатели p1 и p2 после применения к ним операций инкремента и декремента, обведите (подчеркните, раскрасьте или как-то еще) адресуемые области указателей p1 и p2, объясните, как получаются выведенные программой значения;
    - объясните, как получаются выведенные программой значения;
    - сформулируйте общие выводы, к которым вы пришли в процессе выполнения задания.
    #include

    #include
    #include int main()
    {
    // Обычные переменные int a = 1; double b = 3;
    // Указатели int *p1 = &a; double *p2 = &b; void *p4; setlocale(LC_ALL, "Russian ");
    // Адреса «обычных» переменных и размер выделяемой памяти printf(" a: int: start address %p extent = %d байт\n",&a, sizeof(a)); printf(" b: double: start address %p extent %d\n\n",&b,sizeof(b));
    // Адреса указателей и размер выделяемой памяти printf(" p1: pointer: start address %p extent %d\n",&p1,sizeof(p1)); printf(" p2: pointer: start address %p extent %d\n\n",&p2,sizeof(p2));
    // Значение указателя и связанное с ним значение printf(" p1: %p related value %d\n",p1,*p1); printf(" p2: %p related value %lf\n\n",p2,*p2);
    // Значения обычных переменных printf(" a= %d\t \tb= %lf\n",a,b);
    // Изменение значения переменных, используя указатель
    *p1 += 4;
    *p2 = 10;
    // Значения обычных переменных после изменения printf(" обращение по имени a= %d \t b= %lf\n",a,b); printf(" обращение через указатель *p1= %d \t *p2= %lf \n\n",*p1,*p2);
    // Изменение значений указателей
    p4 = p1; p2 = (double*)p1; printf(" Значения указателей после их изменения\n”); printf(" p1= %p \t p2= %p \t p4= %p \n",p1,p2,p4); printf(" *p1= %d \t *p2= %lf \t *(int*) p4= %d \n\n",*p1,*p2,*(int*) p4);
    // Изменение значений указателей p1++; p2--; printf(" p1= %p \t p2= %p \n",p1,p2); printf(" *p1= %d \t *p2= %lf \n",*p1,*p2);
    *p1 = 4; p2++; printf("p1 =%p\t p2=%p \n",p1,p2); printf("*p1=%d \t *p2= %lf \n",*p1,*p2); return 0;
    } a b p1 p2
    FEA8 FEA0 FE9C FE98


    Контрольные вопросы

    1. Что такое указатель?
    2. Какой объем памяти занимает указатель?

    3. Что является значением переменной-указателя?
    4. Как проинициализировать указатель?

    5. Что такое NULL?
    6. Что такое указатель на void? Зачем нужны такие указатели?

    7. Какие операции допустимы при работе с указателями?
    8. Чем отличается унарная операция "&" от унарной "*" ?
    9. Совместимость типов указателей.

    10. Можно ли получить адрес указателя?
    11. Почему к указателю на void нельзя применить операцию разыменования?

    12. Как работают операции инкремента и декремента, примененные к указателям?
    13. Какой спецификатор типа используется при выводе адреса на экран с помощью функции printf()?
    14. В чем отличие записи (double *) a от (double) * a, если а – указатель на целое число?
    15. В чем отличие записи *а++ от ()++, если а – некоторый указатель, отличный от void*?

    16. Как описать указатель на начало массива?
    17. Как описать указатель на указатель?


    написать администратору сайта