728x90
반응형
1차원배열 int array[3]={1,2,3}; 있다치면 array+1 는 항의 이동이다.
위의 소스 결과를 보면 2차원배열 array[3][4]에서 array+1 은 행의 이동을 의미한다.
그럼 array[0] 에서 +1 을 하면 이것도 행의 이동처럼 느껴지겠지만 결과를 보면 +4 를 하여 항이 이동됨을 알수있다.
1차원 배열에서 &array+1 을 하면 배열 전체를 이동하나 2차월배열에서 &array[0]+1 을 하면 행이 이동된다.
2차원 배열 전체 이동하려면 1차원배열처럼 &array+1 을 하면 전체이동이 가능하다.
* 2차월 배열 int array[2][3]; 선언됐을시.
array[2][3]의 주소값을 나타내려면
배열식 &array[2][3]
포인트식 *(array+2)+3
혼합식 array[2]+3
으로 표현할수있다.
여기서 주소에 있는 값을 표현해 내려면..
배열식 array[2][3]
포인트식 *(*(array+2)+3)
혼합식 *(array[2]+3)
array[2][3] -> *(array[2]+3) -> *(*(array+2)+3) 이렇게 배열식을 포인트식으로 변환가능한데..일정한법칙이있다.
[] 을 빼고 나오면 *(array[2]+3) 같이 *( +3) 이 된다. 여기서 [2]를 또 포인트식으로 변환하면 *(*(array+2)+3)이 되는것을 알수있다.
== 대괄호를 빼고 포인트를 둥근괄호밖에 붙히고 둥근괄호안에서 + (플러스)를 해주면 된다.
복잡한 수식을 사용했을시 이것이 주소를 가르치는지 값을 가르치는지 파악하는 방법을 샘의 설명을 들었지만 잘 이해를 못했습니다.
댓글로 설명좀 부탁드려요~~~~
* 형식인수로 다차원 배열이 사용되는 경우
int sum_matrix(int m[][3]);
위처럼 다차원 배열이 형식인수로 사용되는 경우에는 첫번째 색인을 생략할수 있다. 그러나 두번째 색인부터는 모두 명시해 주어야한다.
이것은 배열크기를 컴파일러에게 알려 주어야 하기 때문이다.
* 함수포인터
응용 프로그램에서는 함수 포인터로 구성된 배열이 많이 사용된다. 함수 포인터로 구성된 배열의 선언 형식은 다음과 같다.
반환자료형(*배열이름 [배열크기]) (인수리스트)
사칙연산을 계산하는 함수를 위한 함수 포인트의 배열을 가정할 때, 다음과 같은 배열을 선언할수 있다.
int (*handle [4])(int,int) = { plus,minus,multply,divide}; // 함수포인터배열을 선언할때 변수이름옆에 배열개수(배열크기)를 적는다.
이때 배열의 각 원소는 함수의 시작주소를 가진다.
%% 네트워크
bind() 함수.
생성한 소켓 serv_sock 와 ip주소와,port번호가 설정되어있는 sockaddr_in을 연결해주기위해 bind()함수가 필요하다.
첫번째 인자는 socket()의 반환 값. 두번째 인자는 구조체 sockaddr의 값. 세번째인자는 serv_addr의 size.
bind()성공할시 0 이 반환되고 실패할경우 -1 이 반환된다.
listen() 함수
밑에보면 대기상태진입이라 했지만 연결요청 대기모드를 설정하는 것이다.
주소연결 bind()를 하게되면 서버소켓은 주소(또는 포트)를 가지게된다. 서버 소켓으로 하여금 클라이언트로부터의 연결을
대기(listen)하게 하기 위해서는 또 하나의 과정을 하부 프로토콜 내부가 수행해야한다. 이는 특정 소켓에 listen()을 호출함으로써 가능하다.
첫번째 인자는 serv_sock 을 넣어주고 두번째 인자는 연결을 기다리는 클라이언트의 최대수를 넣는다.
클라이언트의 최대수는 큐(queue)의 방식대로 연결되며 순서대로 1번째가 끝나면 2번째를 받아서 연결하는 방식이다.
listen() 함수가 성공할시 0이 반환되고 실패할경우 -1 이 반환된다.
accept() 함수
주소와 포트에 연결되고 '대기(listen)'를 하고 있는 소켓은 실제로 절대 송수신에 사용되지 않으며 각 클라이언트를 연결하기 위한 새로운 소켓을 획득하기 위한 수단으로 사용된다. 그리고 나서 서버는 새로운 소켓을 통해 송수신을 하게되는데 , 이처럼 클라이언트의 연결을 위한 새로운 소켓을 생성하기 위해서 accept()을 호출하게 된다 .
위의 소스로 accept 함수로 새로운 소켓 clnt_sock 이 생성되어서 송수신에 쓰인다.
이 함수는 큐(queue)에 대기하고 있는 다음 연결(socket)을 꺼낸다. 만약 큐가 비어있으면 accept()는 연결요청이 들어올때까지
멈추어 있게된다 ==> blocking
종합해서 보면
server 에서는
1.연결하기 위한 서버 소켓이 생성되고 serv_sock
2.구조체로 (ip주소,port번호)설정 sockaddr
3.서버소켓에 구조체값 할당 bind
4.서버소켓 대기모드,클라이언트 접속개수 listen
5.연결요청한 클라이언트와 통신할 송수신 소켓을 생성 accept
728x90
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
2011.07.08 [내장형]심재원_수업내용 (11) | 2011.07.08 |
---|---|
[내장형]이수란_20110707_struct & TCPechoClient (21) | 2011.07.07 |
[내장형]윤민석 2011년 7월 6일 수업내용 (21) | 2011.07.06 |
[내장형]김동화 2011년7월 5일 수업내용 (14) | 2011.07.05 |
[내장형]최남식-2011년7월1일 수업내용 (11) | 2011.07.02 |
[내장형]김정환 - 2011년 06월 30일 일일 보고서 (10) | 2011.06.30 |
[내장형]김수만_2011년6월29일_수업내용 (22) | 2011.06.30 |
[내장형]김수만_포스트에 C Code를 웹브라우저에서 보기 좋게 삽입하기 (6) | 2011.06.28 |