프로그래밍/C언어 스피비 2011. 3. 9. 14:52
구조체를 함수의 인수로 전달할 수 있다는 것은 굉장히 편리한 기능이다. 마치 정수나 실수를 사용하듯이 변수 자체를 그대로 전달할 수 있기 때문이다. 그러나 실제로 구조체를 함수의 인수로 직접 사용하는 경우는 별로 없다. 구조체가 커지면 인수 전달에 그만큼 많은 시간을 필요로 하고 메모리도 많이 소모하기 때문에 구조체보다는 포인터를 사용하는 방법이 더 효율적이다. 이럴 때는 당연히 포인터를 사용해야 한다. 다음과 같이 수정해 보자. void OutFriend(tag_Friend *pf) //당연히 포인터로 넘기는것이 좋다 { printf("이름=%s, 나이=%d, 키=%.1f\n",pf->Name,pf->Age,pf->Height); } void main() { tag_Friend Friend={"김상형"..
프로그래밍/C언어 스피비 2011. 3. 9. 14:47
구조체는 같은 구조체끼리 대입을 할 수 있지만, 배열은 같은 배열이든 뭐든 대입 자체가 안된다. 이유는?!?! => 배열의 이름은 시작번지를 가리키는 포인터 상수 이기 떄문에 좌변값이 아니며 대입식의 좌변에 놓일 수 없다. 배열끼리 꼭 대입을 하려면 루프를 돌면서 배열 요소를 일일이 대입하는 수 밖에 없다. 구조체는 컴파일러가 구조체의 이름을 좌변값으로 인정하기때문에 가능.
프로그래밍/C언어 스피비 2011. 3. 9. 14:44
>> 구조체의 정의 : 여러타입 변수들이 모여있는 집합체로 이 집합체는 논리적으로 관련되어 있다. 하나의 이름으로 통칭하며, 구조체를 사용하는 이유는 변수들이 논리적으로 하나가 되기 때문에 인식하기가 쉽고 프로그래밍을 하기도 편하다. 1. 변수들의 모임 2. 변수들은 각기 다른 타입을 가질 수 있음. >> 구조체의 선언과 정의 (1) 구조체 선언 struct tag_ABC { char AAA; int BBB; char CCC; }; (2) 구조체 선언과 정의 struct { char AAA; int BBB; char CCC; } name; (3) 구조체의 선언과 정의 struct tag_ABC { char AAA; int BBB; char CCC; } name; (4) 구조체 정의 struct tag_A..
프로그래밍/C언어 스피비 2011. 3. 9. 14:32
공용체정의공용체(Union)는 모든 면에서 구조체와 같으며 선언 문법이나 사용하는 방법이 동일하다. 다만 공용체에 속한 멤버들이 기억 장소를 공유한다는 것만 다르다. 기억 장소를 어떻게 공유한다는 것인지 선뜻 이해하기 힘든데 일단 똑같은 모양의 구조체와 공용체를 선언해 놓고 비교해 보도록 하자. 공용체를 선언할 때는 키워드 struct 대신에 union을 사용한다. struct { int a; short b[2]; } st; union { int a; short b[2]; } un; 둘 다 정수형 멤버 a와 크기 2의 short형 배열 b를 멤버로 가지고 있는데 st는 구조체이고 un은 공용체이다. 이 두 변수가 메모리에 구현된 모양을 그림으로 비교해 보면 다음과 같다. 구조체는 선언된 멤버가 순서대로 ..
프로그래밍/C언어 스피비 2011. 3. 9. 14:13
비트 구조체정의비트 구조체는 비트들을 멤버로 가지는 구조체이며 비트 필드(bit field)라고도 부른다. 잘 알다시피 비트는 기억의 최소 단위이며 0 또는 1중 하나를 기억한다. 비트 하나로 2가지 경우, 두 개로 4가지 경우까지 기억할 수 있으며 비트 세 개가 모이면 8가지의 다른 수를 기억시킬 수 있는데 일반적으로 표현하자면 비트 n개가 모이면 2n개의 숫자를 표현할 수 있다. 멤버가 가질 수 있는 값의 범위가 아주 작다면 32비트의 int나 8비트의 char보다 더 작은 단위로 비트를 쪼개 알뜰하게 정보를 기억시킬 수 있는데 이때 사용하는 것이 비트 구조체이다. 비트 구조체를 선언하는 기본 형식은 다음과 같다. struct 태그명 { 타입 멤버1:비트수; 타입 멤버2:비트수; 타입 멤버3:비트수;..