Posted
Filed under 공부한 것들/C/C++

포인터 변수를 정의 할때는 const를 최대2개까지 포함 할수 있음.(포인터 변수자체에 보관된 정보, 포인터가 가리키는변수에 보관된 정보)

Const 속성이 전혀 적용되지 않은포인터

int i1 = 10;
int i2 = 20;
int* p = &i1;

p = &i2; //OK
*p = 30; //OK
05 : 포인터 변수에 변수에 값을 대입(const 여부에 따라서 오류가 날수 있음)
06 : 포인터가 가르키는 변수에 값을 대입(const 여부에 따라서 오류가 날수 있음)

포인터가 가르키는 변수가 const 인 경우
int i1 = 10;
int i2 = 20;
const int* p = &i1;

p = &i2; //OK
*p = 30; //Fail
p가
가르키는 변수는 const int 타입이라는 의미(=06번째 줄처럼 p가 가르키는 변수의 값을 변경하는 것을 허용하지 않음)

포인터 자체가 Const 인 경우
int i1 = 10;
int i2 = 20;
int* const p = &i1;

p = &i2; //Fail
*p = 30; //OK
int 타입을 가리키는 p는 const 속성을 갖는다라는 의미(=05번째 줄 처럼 p의 값을 바꾸는 행위는 허용하지 않음, p라는 포인터 변수는 const지만 p가 가르키는 변수는 const가 아니므로 포인터가 가르키는 변수의 값을 변경하는 것은 가능.)

포인터를 가르키는 변수도 const 포인터 변수도 const
int i1 = 10;
int i2 = 20;
const int* const p = &i1;

p = &i2; //Fail
*p = 30; //Fail
포인터 p와 p가 가르키는 변수까지도 const(따라서 05,06 Line 모두 Error)
2009/01/05 20:08 2009/01/05 20:08
Posted
Filed under 공부한 것들/C/C++
#include 
#include 
#include 
#include 

#define BUFSIZE 1024

void ErrorHandling(char *message){
	fputs(message, stderr);
	fputc('\n',stderr);
	exit(1);
}

int main(int argc, char **argv){
	WSADATA	wsaData;
	SOCKET	hServSock;
	SOCKET	hClntSock;
	char	message[BUFSIZE];
	int	strlen;

	SOCKADDR_IN	servAddr;
	SOCKADDR_IN	clntAddr;
	int clntAddrSize;

	if(argc!=2){
		printf("Usage : %s \n",argv[0]);
		exit(1);
	}

	/*윈속 초기화*/
	if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
		ErrorHandling("WSAStartup Error!");

	hServSock=socket(PF_INET, SOCK_STREAM, 0);
	if(hServSock == INVALID_SOCKET)
		ErrorHandling("socket Error!!");

	memset(&servAddr, 0, sizeof(servAddr));
	servAddr.sin_family=AF_INET;
	servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
	servAddr.sin_port=htons(atoi(argv[1]));

	if(bind(hServSock, (SOCKADDR *)&servAddr, sizeof(servAddr))==SOCKET_ERROR)
		ErrorHandling("bind() Error!!");

	if(listen(hServSock, 5)==SOCKET_ERROR)
		ErrorHandling("listen() Error!!");

	clntAddrSize=sizeof(clntAddr);
	hClntSock=accept(hServSock, (SOCKADDR *) &clntAddr, &clntAddrSize);
	if(hClntSock==INVALID_SOCKET)
		ErrorHandling("accept() Error!!");

	while((strlen=recv(hClntSock, message, BUFSIZE, 0)) !=0){
		send(hClntSock, message, strlen, 0);
	}
	closesocket(hClntSock);
	WSACleanup();
	return 0;
}
소스 설명은 추후에
2008/12/22 18:15 2008/12/22 18:15