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

  • include void f(float a, float *p, float *s); int main(){ float al,pl,sl; scanf("%f",al);

  • include void f(float a, float p, float s); int main(){ float al,pl,sl; scanf("%f",al);

  • Передача параметров в языках С и С++. Передача параметров в языках с и С Передача данных через глобальные переменные


    Скачать 64.74 Kb.
    НазваниеПередача параметров в языках с и С Передача данных через глобальные переменные
    Дата08.04.2022
    Размер64.74 Kb.
    Формат файлаdocx
    Имя файлаПередача параметров в языках С и С++.docx
    ТипДокументы
    #455309

    Передача параметров в языках С и С++

    Передача данных через глобальные переменные


    #include

    void f();

    float a,p,s;

    int main(){

    scanf("%f",&a);

    f();

    printf("a=%f p=%f s=%f",a,p,s);

    }

    void f() {

    p=4*a;

    s=a*a;

    }
    рис. 1



    Передача данных через указатели в стиле языка С


    В некоторых ситуациях, где требуется косвенное обращение, C++ настаивает на использовании указателей. Принятие решения, использовать ли указатели вместо ссылок, или наоборот, часто является вопросом выбранного стиля программирования.

    Размер указателя в основном зависит от архитектуры системы, в которой он реализован. Например, размер указателя в 32 битах составляет 4 байта (32 бит) и 8 байт(64 бит) в 64-битных машинах. Возьмем за основу х64 архитектуру. После выполнения функции main() ячейки локальных переменных очищаются.
    #include

    void f(float a, float *p, float *s);

    int main(){

    float al,pl,sl;

    scanf("%f",&al);

    f(al,&pl,&sl);

    printf("a=%f p=%f s=%f",al,pl,sl);

    }

    void f(float a, float *p, float *s){

    *p=4*a;

    *s=a*a;

    }


    рис. 2



    Передача данных по ссылке в стиле языка С++


    Стандарт C++ старательно избегает диктовать правила, каким образом компилятор должен реализовать поведение ссылок, однако любой компилятор C++ реализует ссылки как указатели. Так что декларация ссылки если не будет полностью оптимизирована, то выделит такое же количество памяти, как и для указателя, и поместит адрес переменной i в это хранилище. Таким образом, и указатель, и ссылка занимают одинаковый объем памяти.
    #include

    void f(float a, float &p, float &s);

    int main(){

    float al,pl,sl;

    scanf("%f",&al);

    f(al,pl,sl);

    printf("a=%f p=%f s=%f",al,pl,sl);

    }

    void f(float a, float &p, float &s){

    p=4*a;

    s=a*a;

    }


    рис. 3

    Отличия ссылок от указателей:


    1. Указатель может быть переназначен любое количество раз, в то время как ссылка после привязки не может быть перемещена на другую ячейку памяти. То есть указатель может указывать на разные объекты в течение своей жизни, ссылка может обращаться только к одному объекту в течение своей жизни. Это значимое отличие ссылок и указателей.

    2. Указатели могут указывать "в никуда" (быть равными NULL), в то время как ссылка всегда указывает на определенный объект.

    3. Вы не можете получить адрес ссылки, как можете это делать с указателями.

    4. Не существует арифметики ссылок, в то время как существует арифметика указателей. Однако есть возможность получить адрес объекта, указанного по ссылке, и применить к этому адресу арифметику указателей (например &obj + 5).


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