2013-08-18 2 views
0

Массивы и структуры в C хранят данные в памяти, которые являются непрерывными. Тогда почему C не позволяет прямое копирование массивов с использованием «=», где это разрешено для структуры. Пример:Копирование массива в структуре копирования C v/s в C

int a[3] = {1,2,3}; 
int b[3]; 
b = a; // why is this not allowed. 

struct book b1, b2; 
b1.page = 100; 
b1.price = 10.0; 

b2 = b1; // Why is this allowed 
+0

Именно так определяется язык. Если вы хотите иметь возможность копировать массив по заданию, задайте его как член структуры. –

ответ

0

Для первого вопроса

Вы не можете напрямую писать в массив, вы можете написать только отдельные ячейки в массиве. Вы можете использовать цикл for для инициализации массива b или memcpy (& b, & a, sizeof b);

И с помощью структур, которые компилятор делает memcpy для вас.

Исправьте меня, если я ошибаюсь.

0

При вводе: b=a, компилятор ожидает, что вы назначаете массив Б, но a это просто указатель на место, где первый элемент массива хранится так есть тип mismatch.This является поэтому printf("%d",*a); будет печатать 1. И что касается того, почему структуры могут быть назначены, это связано с тем, что b1 и b2 в приведенном выше примере являются в основном переменными типа данных book и могут быть назначены переменные. Когда переменные назначаются, содержимое копируется и они не относятся к тому же Memory Местоположение.Отель пример может объяснить, что я более ясно говорил:

#include<stdio.h> 

typedef struct{int a;}num; 
int main() 
{ 
    num b,c; 
    b.a = 10; 
    c=b; 
    b.a =11; 
    printf("%d\n",(c.a)); 
    return 0; 
} 

выход 10. Это доказывает, что b и c в этом примере не указывают на ту же память. Надеюсь, это поможет.