2013-08-18 3 views
0

C의 배열과 구조체는 인접한 메모리의 데이터를 저장합니다. 그런데 왜 C가 구조체에 허용 된대로 "="를 사용하여 배열을 직접 복사하지 못하게합니까? 예 : 직접 배열에 쓸 수있는 첫 번째 질문C의 배열 복사 C/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, &, sizeof b).

그리고 구조체를 사용하면 컴파일러가 memcpy를 처리합니다.

내가 틀렸다고 정정하십시오.

0

b=a을 입력하면 컴파일러에서 배열을 b에 할당하려고하지만 a은 배열의 첫 번째 요소가 저장되는 위치에 대한 포인터 일 뿐이므로 형식이 일치하지 않습니다. 이것이 이유입니다 printf("%d",*a);1을 인쇄합니다. 구조체를 할당 할 수있는 이유는 위의 예에서 b1b2은 기본적으로 데이터 유형이 book이고 변수를 할당 할 수 있기 때문입니다. 변수가 할당되면 내용이 복사되고 동일하지 않습니다 메모리 location.This 예를 들어 내가 더 명확하게 말하고 무엇을 설명 할 수 있습니다

#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입니다. 이것은이 예제에서 bc이 동일한 memory.hope를 가리 키지 않음을 증명합니다. 이것이 도움이됩니다.