C 언어
배열을 사용하면 같은 종류의 여러 데이터 항목을 보유할 수 있는 변수 유형을 정의할 수 있습니다. 유사하게 구조 다른 종류의 데이터 항목을 결합할 수 있는 C에서 사용할 수 있는 또 다른 사용자 정의 데이터 유형입니다.
구조는 레코드를 나타내는 데 사용됩니다. 도서관에서 책을 추적하고 싶다고 가정해 봅시다. 각 책에 대한 다음 속성을 추적할 수 있습니다. −
구조를 정의하려면 struct를 사용해야 합니다. 성명. struct 문은 둘 이상의 멤버가 있는 새 데이터 형식을 정의합니다. struct 문의 형식은 다음과 같습니다 -
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables];
구조 태그 선택적이며 각 멤버 정의는 int i와 같은 일반 변수 정의입니다. 또는 float f; 또는 다른 유효한 변수 정의. 구조 정의 끝에서 마지막 세미콜론 앞에 하나 이상의 구조 변수를 지정할 수 있지만 선택 사항입니다. Book 구조를 선언하는 방법은 다음과 같습니다. -
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
구조의 모든 멤버에 액세스하려면 멤버 액세스 연산자(.)를 사용합니다. . 멤버 액세스 연산자는 구조 변수 이름과 액세스하려는 구조 멤버 사이의 마침표로 코딩됩니다. struct 키워드를 사용합니다. 구조 유형의 변수를 정의합니다. 다음 예제는 프로그램에서 구조를 사용하는 방법을 보여줍니다 -
라이브 데모#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info */ printf( "Book 1 title : %s\n", Book1.title); printf( "Book 1 author : %s\n", Book1.author); printf( "Book 1 subject : %s\n", Book1.subject); printf( "Book 1 book_id : %d\n", Book1.book_id); /* print Book2 info */ printf( "Book 2 title : %s\n", Book2.title); printf( "Book 2 author : %s\n", Book2.author); printf( "Book 2 subject : %s\n", Book2.subject); printf( "Book 2 book_id : %d\n", Book2.book_id); return 0; }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Book 1 title : C Programming Book 1 author : Nuha Ali Book 1 subject : C Programming Tutorial Book 1 book_id : 6495407 Book 2 title : Telecom Billing Book 2 author : Zara Ali Book 2 subject : Telecom Billing Tutorial Book 2 book_id : 6495700
다른 변수나 포인터를 전달하는 것과 같은 방식으로 구조체를 함수 인수로 전달할 수 있습니다.
라이브 데모#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; /* function declaration */ void printBook( struct Books book ); int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info */ printBook( Book1 ); /* Print Book2 info */ printBook( Book2 ); return 0; } void printBook( struct Books book ) { printf( "Book title : %s\n", book.title); printf( "Book author : %s\n", book.author); printf( "Book subject : %s\n", book.subject); printf( "Book book_id : %d\n", book.book_id); }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
다른 변수에 대한 포인터를 정의하는 것과 같은 방식으로 구조체에 대한 포인터를 정의할 수 있습니다 -
struct Books *struct_pointer;
이제 위에서 정의한 포인터 변수에 구조체 변수의 주소를 저장할 수 있습니다. 구조 변수의 주소를 찾으려면 '&'; 다음과 같이 구조체 이름 앞에 연산자 -
struct_pointer = &Book1;
해당 구조체에 대한 포인터를 사용하여 구조체의 멤버에 액세스하려면 다음과 같이 → 연산자를 사용해야 합니다 -
struct_pointer->title;
구조체 포인터를 사용하여 위의 예를 다시 작성해 보겠습니다.
라이브 데모#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; /* function declaration */ void printBook( struct Books *book ); int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info by passing address of Book1 */ printBook( &Book1 ); /* print Book2 info by passing address of Book2 */ printBook( &Book2 ); return 0; } void printBook( struct Books *book ) { printf( "Book title : %s\n", book->title); printf( "Book author : %s\n", book->author); printf( "Book subject : %s\n", book->subject); printf( "Book book_id : %d\n", book->book_id); }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
비트 필드를 사용하면 구조에서 데이터를 패킹할 수 있습니다. 이것은 메모리나 데이터 저장이 중요할 때 특히 유용합니다. 전형적인 예는 다음과 같습니다 -
여러 개체를 기계어로 묶는 것. 예를 들어 1비트 플래그를 압축할 수 있습니다.
외부 파일 형식 읽기 -- 비표준 파일 형식은 예를 들어 9비트 정수로 읽을 수 있습니다.
C를 사용하면 변수 뒤에 :bit length를 넣어 구조 정의에서 이를 수행할 수 있습니다. 예를 들어 -
struct packed_struct { unsigned int f1:1; unsigned int f2:1; unsigned int f3:1; unsigned int f4:1; unsigned int type:4; unsigned int my_int:9; } pack;
여기에서 Packed_struct는 6개의 멤버를 포함합니다:4개의 1비트 플래그 f1..f3, 4비트 유형 및 9비트 my_int.
C는 필드의 최대 길이가 컴퓨터의 정수 단어 길이보다 작거나 같으면 위의 비트 필드를 가능한 한 압축하여 자동으로 압축합니다. 그렇지 않은 경우 일부 컴파일러는 필드에 대한 메모리 겹침을 허용하는 반면 다른 컴파일러는 다음 단어에 다음 필드를 저장할 수 있습니다.
C 언어
어느 날 고객을 방문하면서 Checker 검사 체크리스트 책이 고객의 검사에 도움이 되는지 물었습니다. 그들은 우리가 무슨 말을 하는지 몰랐습니다. 우리는 그들이 한동안 크레인 검사용 체크리스트 책을 주문해 왔다고 설명했습니다. 오, 크레인 책. 우리 호스트가 말했습니다. “물론이죠. 우리는 그것들을 사랑합니다. 훌륭하게 작동합니다.” 그 대화를 통해 우리는 궁금해졌습니다. 얼마나 많은 고객이 우리 책을 사용하여 크레인, 지게차, 트럭 등만 검사하고 조직의 자산을 검사하는 데 우리 책을 사용할 수 있는지 모릅니다. 우리는 고
실렌시오 시각 장애인에게 적합한 독서를 제공하기 위해 3D 프린팅으로 만든 부조를 활용한 그림 시집입니다. . Néstor Toribio Ruiz가 쓴 이 책은 전문 그래픽 디자이너이자 새로운 기술을 실험하려는 큰 열망으로 출판계에 열정을 가진 Jennifer Martin-Lorente가 해석했습니다. 이 프로젝트는 또한 O.N.C.E.의 참여로 간주됩니다. 이미지 1:촉각책 Silencio의 페이지. 출처:Recreus. 따라서 Silencio는 독서 민주화를 추구하는 예술적이고 창의적이며 지원적인 프로젝트입니다. 모