Передача структуры с указателем на функцию в мелкой или глубокой копии в C - PullRequest
0 голосов
/ 31 мая 2018

В C ++ есть перегруженный конструктор копирования и перегрузка присваивания для глубокой копии.Так как по умолчанию доступна мелкая копия.

В C структура, имеющая член-указатель, если передана функции или назначена уже созданному новому объекту структуры, является глубокой или мелкой копией ??

Например,

struct data {
    int a;
    int *b;
};

void test_func(struct data tes)
{

    tes.a =3;
    int *c = new int[1];
    c[0]=2;
    tes.b =c;
    std::cout<<*tes.b;

}
int main() {
    struct data test;
    int *c = new int;
    *c=4;

    test.a = 1;
    test.b =c;



    std::cout<<*test.b;
    test_func(test);

    std::cout<<*test.b;

}

1 Ответ

0 голосов
/ 31 мая 2018

Структура в C просто копируется как с memcpy.Таким образом, вы получаете копию указателя, но не копию содержимого, на которое указывает указатель.В этом случае ничто не отличается от c ++.

В C вы также можете написать функцию для «глубокого копирования», если хотите.Каждый вид ООП может быть сделан с C, но вы должны написать все и все от руки.

...