728x90
반응형
구조체 (struct)
- 의미상으로 연관된, 다른 자료형의 데이터를 묶은, 사용자 정의 자료형
(cf. 배열 - 같은 자료형 묶음)
보통 main 함수 밖에 정의 하여, 다른 함수에서도 사용할 수 있게 정의함.
구조체 원형의 정의에서는 메모리가 할당 되지 않고, 변수선언시 메모리 할당됨
독립적으로 사용되기보다 구조체의 배열이나, 연결리스트의 노드로 사용
-구조체 사용
① 구조체 정의
_구조체 정의 후 변수 선언_
위의 구조체에서 (태그) tag => student
(자료형) type => struct student
이를 typedef 를 이용해 새로운 자료형을 정의할 수 있다.
② typedef 사용
③ 구조체 선언과 자료형 정의(typedef) 동시에
- 구조체 멤버
: 도트연산자(.) 사용해 접근
- 구조체의 초기화
: 배열과 달리, 하나의 구조체 변수가 다른 구조체 변수의 값을 한번에 받을 수 있다.
- 구조체의 배열
-> 구조체의 배열에서 각 원소의 멤버 접근시, 배열 색인뒤 도트(.) 붙임
- 구조체 가리키는 포인터 변수
: 화살표 사용해 접근
- 구조체의 함수인수로 전달 방법
(*) 함수의 인수전달 기법
┌ 값 전달 호출(call by value)
│ : main함수내 변수 값 불변
│ 호출된 함수에서 메인 함수로 인수전달은 return 문 이용해 1개만 가능
│
└ 주소 전달 호출(call by address)
: 포인터 이용해 main의 변수 수정 가능.
호출된 함수의 변수를 포인터로 수정하므로, 여러개의 변수 수정 가능
-> 일반적인 자료형을 함수의 인수로 전달할 때, 원본 변수의 수정유무에 따라 값 전달, 주소 전달 방법을 선택
구조체 자료형은 인수로 전달되는 자료형 크기가 클 경우 문제가 되므로, 포인터를 이용한 주소 전달 방법을 주로 사용.
_구조체의 메모리 할당_
---------------------------------------------------------------------------------------------------------------------
Network
---------------------------------------------------------------------------------------------------------------------
_Port_
- 의미상으로 연관된, 다른 자료형의 데이터를 묶은, 사용자 정의 자료형
(cf. 배열 - 같은 자료형 묶음)
보통 main 함수 밖에 정의 하여, 다른 함수에서도 사용할 수 있게 정의함.
구조체 원형의 정의에서는 메모리가 할당 되지 않고, 변수선언시 메모리 할당됨
독립적으로 사용되기보다 구조체의 배열이나, 연결리스트의 노드로 사용
-구조체 사용
① 구조체 정의
_구조체 정의 후 변수 선언_
struct student // 구조체 원형 정의 ( struct 구조체명(tag) { )
{
_구조체 정의와 변수선언을 동시에_ {
char name[20] ; // 구성요소(멤버 - name[],english, math )
int english ;
int math ;
int english ;
int math ;
} ;
struct student st; // struct student로 변수선언 ( 자료형(type) 변수명 ; )
// 여러개 변수 선언시 ( struct student st, st2, st3, *st; )
struct student // 구조체 원형정의
{
(*) tag 는 type와 다르게 단독으로 변수선언에 쓰일 수 없다.{
char name[20] ;
int english ;
int math ;
int english ;
int math ;
}st1 ; // 여러개 변수 선언시 ( } st1,st2,st3 ; )
// struct student로 변수선언 ( 자료형 변수명 ; )
// struct student로 변수선언 ( 자료형 변수명 ; )
위의 구조체에서 (태그) tag => student
(자료형) type => struct student
이를 typedef 를 이용해 새로운 자료형을 정의할 수 있다.
② typedef 사용
typedef : 새로운 자료형을 정의, C 언어,
(cf. #define - 전처리 언어 )
구조체 선언 -> struct student
{
char name[20] ;
int english ;
int math ;
};
자료형 정의 -> typedef struct student STUDENT;
변수 선언 -> student struct st1;
(cf. #define - 전처리 언어 )
typedef Old_type New_type ; |
구조체 선언 -> struct student
{
char name[20] ;
int english ;
int math ;
};
자료형 정의 -> typedef struct student STUDENT;
변수 선언 -> student struct st1;
STUDENT st1;
③ 구조체 선언과 자료형 정의(typedef) 동시에
typedef struct student
// student (구조체의 태그)는 생략가능
{
// student (구조체의 태그)는 생략가능
{
char name[20] ;
int english ;
int math ;
int english ;
int math ;
} STUDENT;
변수 선언 -> student struct st1;
STUDENT st1;
- 구조체 멤버
: 도트연산자(.) 사용해 접근
( 구조체변수. 멤버명 ) |
- 구조체의 초기화
: 배열과 달리, 하나의 구조체 변수가 다른 구조체 변수의 값을 한번에 받을 수 있다.
ex) typedef struct { int x; int y; }ST; ST st1={0,0} ; ST st2;={1,1} ; |
st1=st2 ; // OK ! |
- 구조체의 배열
typdef struct { char name[20]; char country[20]; int age; } STUDENT; int main() { STUDENT st[4]; st[1].name[0]=' j ' ; st[1].name[1]=' o '; st[1].name[2]=' e '; return 0; } |
- 구조체 가리키는 포인터 변수
: 화살표 사용해 접근
( 구조체변수 -> 멤버명 ) // = (*구조체변수).멤버명 |
- 구조체의 함수인수로 전달 방법
구조체의 멤버로 전달 |
구조체를 전달 -> 전달 인수의 개수를 줄일 수 있음 |
구조체 주소를 전달 -> 전달 인수의 용량을 줄일 수 있음 |
ex. typedef struct { int a; int b; }ST; void pass(int, int, int, int); int main() { ST st1; ST st2; pass( st1.a , st1.b, st2.a, st2.b); return 0; } void pass(int a1, int b1, int a2, int b2) { return; } |
typedef struct { int a; int b; }ST; void pass(ST, ST); int main() { ST st1; ST st2; pass( st1, st2 ); return 0; } void pass(ST st1, ST st2) { return; } |
typedef struct { int a; int b; }ST; void pass(ST *, ST *); int main() { ST st1; ST st2; pass( &st1, &st2); return 0; } void pass(ST *st1, ST *st2 ) { return; } |
┌ 값 전달 호출(call by value)
│ : main함수내 변수 값 불변
│ 호출된 함수에서 메인 함수로 인수전달은 return 문 이용해 1개만 가능
│
└ 주소 전달 호출(call by address)
: 포인터 이용해 main의 변수 수정 가능.
호출된 함수의 변수를 포인터로 수정하므로, 여러개의 변수 수정 가능
-> 일반적인 자료형을 함수의 인수로 전달할 때, 원본 변수의 수정유무에 따라 값 전달, 주소 전달 방법을 선택
구조체 자료형은 인수로 전달되는 자료형 크기가 클 경우 문제가 되므로, 포인터를 이용한 주소 전달 방법을 주로 사용.
_구조체의 메모리 할당_
---------------------------------------------------------------------------------------------------------------------
Network
---------------------------------------------------------------------------------------------------------------------
_Port_
TCP/IP 네트워크에서 포트 번호는 트래픽을 컴퓨터 내에서 실행되고 있는 적절한 프로그램에 분배시키기 위해 논리적으로 할당한 것.
① Well-known port (잘 알려진 포트) 0~1023 번
:특정 용도를 위해 IANA에서 할당한 TCP, UDP 포트번호
일반적으로 용도별로 포트번호가 지정되어있지만 변경하여 사용하기도 함.
② registered port (등록된 포트) 1024~49151번
③ dynamic port (동적 포트) 49152 ~ 65535 번
ex.well-known port 7 사용
① Well-known port (잘 알려진 포트) 0~1023 번
:특정 용도를 위해 IANA에서 할당한 TCP, UDP 포트번호
일반적으로 용도별로 포트번호가 지정되어있지만 변경하여 사용하기도 함.
② registered port (등록된 포트) 1024~49151번
③ dynamic port (동적 포트) 49152 ~ 65535 번
ex.well-known port 7 사용
_ [book p.24] TCP echo client _
/* ---Practical.h--- */
void DieWithUserMessage(const char *msg, const char *detail);
void DieWithSystemMessage(const char *msg);
void DieWithSystemMessage(const char *msg);
/* ---DieWithMessage.c--- */
/* ---TCPEchoClient4.c--- */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include"Practical.h" // messgae 함수 선언된 헤더파일 include
#define BUFSIZE 30 // 문자열 크기
/* --- sock ( ) --- */
/* --- 주소 구조체 값 입력 --- */
/* --- connect --- */
/* --- 입력한 문자열(argv[2]) send( ) --- */
/* --- recv ( ) --- */
return 0;
}
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include"Practical.h" // messgae 함수 선언된 헤더파일 include
#define BUFSIZE 30 // 문자열 크기
int main(int argc, char *argv[])
{
/* --- 변수 선언 --- */
/* --- sock ( ) --- */
/* --- 주소 구조체 값 입력 --- */
/* --- connect --- */
/* --- 입력한 문자열(argv[2]) send( ) --- */
/* --- recv ( ) --- */
return 0;
}
-> 실행결과
...... end........
내용이 별로 없는 것 같네요;; 오타,비문 지적, 추가설명 환영합니다~
728x90
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
[내장형]김정우-7월13일 일일보고서 (16) | 2011.07.13 |
---|---|
[내장형]황세선 2011년7월12일 수업내용 (31) | 2011.07.13 |
[내장형] 2011년 7월 11일 일일 보고서(선주) (14) | 2011.07.11 |
2011.07.08 [내장형]심재원_수업내용 (11) | 2011.07.08 |
[내장형]윤민석 2011년 7월 6일 수업내용 (21) | 2011.07.06 |
[내장형]김동화 2011년7월 5일 수업내용 (14) | 2011.07.05 |
[내장형]이성재 2011년7월4일 수업내용 (15) | 2011.07.04 |
[내장형]최남식-2011년7월1일 수업내용 (11) | 2011.07.02 |