Install couchdb for Ubuntu 12.04

Posted in 개인/ㄴLinux by

Install couchdb for Ubuntu 12.04

$ sudo add-apt-repository ppa:couchdb/stable

$ sudo apt-get update

$ sudo apt-get install couchdb


Install couchdb for Ubuntu 12.04

http://smilejay.com/2013/11/easy_install-mporterror-entry-point-console_scripts-easy_install-not-found/

[C언어] 포인터와 배열의 관계

Posted in 카테고리 없음 by

다차원 배열을 포인터로 접근할 때 이해를 돕기 위하여 작성합니다. (매번 잊어버림)
다차원 배열을 함수 매개변수(파라미터)로 넘길 때에도 같은 원리임.

먼저 예제 소스코드와 결과를 보면서 설명하겠습니다.

#include 

int main(){
	int array[2][3][4] = {
		{{1,  2,  3,  4},
		 {5,  6,  7,  8}, 
		 {9,  10, 11, 12},},
		{{13, 14, 15, 16},
		 {17, 18, 19, 20}, 
		 {21, 22, 23, 24},},
	};
	int (*ptr1)[4] = array[0];
	int *ptr2 = array[0][1];
	int i;

	for(i=0; i<4; i++)
		printf("%d\t", ptr1[1][i]);
	puts("");
	for(i=0; i<4; i++)
		printf("%d\t", ptr2[i]);
	puts("");

	printf("%d\n", sizeof(array)/sizeof(int));
	printf("ptr1: 0x%x, ptr2: 0x%x\n", ptr1, ptr2);
	printf("ptr1: 0x%x, ptr2: 0x%x\n", ptr1[1], &(ptr2[1]));
	printf("ptr1: 0x%x, ptr2: 0x%x\n", &(ptr1[1][1]), &(ptr2[1]));
	printf("ptr1: 0x%x, ptr2: 0x%x\n", ++ptr1, ++ptr2);
	return 0;
}


3차원 array 배열을 선언하였고, 포인터를 이용해 array[0]로 시작되는 2차원 배열을 조작하고 싶습니다.
이때, *ptr1 = array[0]; 을 하여 ptr1의 값을 변경시키면 ptr1+1 혹은 ptr1[1] 했을때의 결과는 sizeof(int)만큼 움직이게 됩니다.
때문에 int (*ptr)[4] = array[0]; 으로 명시를 해줘서 ptr+1 혹은 ptr[1] 했을때의 sizeof(int)*4만큼 이동한다는 것을 선언시에 명시해줘야 합니다.
그러면 이를 통해 ptr[1][0]식의 2차원 배열 접근방식으로 포인터를 사용할 수 있죠. 주소계산법은 ptr주소 + 1 * sizeof(int) * 4 + 0 * sizeof(int) 식으로 이루어지게 됩니다.

결과를 통해 위에서 말한 것을 확인해보겠습니다.
ptr1의 주소는 0xa0482bf0와 같습니다. +1 혹은 [1] 연산을 통해 이동을 명령했을 시 0xF(16=sizeof(int)*4)만큼 이동한 것을 확인할 수 있습니다.
ptr1[1][1]을 통해 ptr1의 포인터를 2차원 배열처럼 사용할 수 있었습니다. 
다차원 배열의 함수 파라미터를 선언할 때에도 이와 같은 주소계산법을 통해 선언해준다면 오류없이 사용할 수 있습니다.