본문 바로가기

2차원 배열 포인터 (2) 별표 하나는 대괄호 하나에 해당한다. 2차원 배열을 포인터로 접근했을 때 별(*)표 하나는 행을 대상체로 하므로 배열 요소 자체의 값을 구할 수 없다. 포인터 변수 더하기 정수는 행 단위로 움직인다. /* *( imsip + 1 ) 과 *imsip + 1의 차이 */ #include main() { int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } }; int ( *imsip )[ 2 ]; imsip = imsi; printf( "%#010x %#010x\n", *imsip, *imsip + 0 ); printf( "%#010x %#010x\n", *( imsip + 1 ), *imsip + 1 ); printf( "%#010x %#..
2차원 배열 포인터 (1) 배열 포인터 정의 int *imsip; // 1차원 배열 포인터 int (*imsip2)[ 3 ]; // 2차원 배열 포인터 int (*imsip3)[ 2 ][ 3 ]; // 3차원 배열 포인터 /* 1차원 배열의 sizeof */ #include main() { int imsi[ 2 ]; int *imsip; printf( "%d\n", sizeof( imsi ) ); // 8 printf( "%d\n", sizeof( imsip ) ); // 4 printf( "%d\n", sizeof( *imsip ) ); // 4 }. /* 2차원 배열의 sizeof */ #include main() { int imsi[ 2 ][ 3 ]; int ( *imsip )[ 3 ]; ..
배열의 초기화 1차원 배열 #include main() { int imsi[ 3]; imsi[ 0 ] = 0; printf( "%d %d %d", imsi[ 0 ], imsi[ 1 ], imsi[ 2 ] ); }// output 0 -541085696 -541125761 위 예를 보면 배열이 어떤 값을 저장할 수 있는지를 지정하는 타입이 있다. 배열의 첨자를 이용하여 배열의 개수도 지정한다. 배열의 첨자는 0부터 시작하므로 정의할 때 첨자 수와 사용할 때 첨자 수는 -1의 오차를 보인다. imsi[ 1 ], imsi[ 2 ]는 초기화를 하지 않았으므로, 어떠한 값이 들어가 있을지 아무도 모른다. 다음의 두가지 방법은 imsi 배열을 초기화 시켜준다. for ( i = 0; i < 3; i++ ) { ..
포인터 변수 포인터 포인터는 번지에 대한 기호화된 표현을 말한다. int imsi; imsi라는 변수를 정의한 문장을 만나면 시스템은 imsi에 대하여 4바이트의 메모리를 할당한다. 시스템이 할당해 준 4바이트는 다른 프로세스들이 할당받지 못하므로 안전하게 사용할 수 있다. 4바이트는 모두 번지라고 하는 이름을 가지고 있고, 일반적으로 4바이트 형식으로 표현된다. int imsi (4byte) 1byte : 0x8047c70 1byte : 0x8047c71 1byte : 0x8047c72 1byte : 0x8047c73 결국 포인터라는 것은 메모리의 위치를 표현한 기호인 것이다. 포인터 변수 포인터 변수는 포인터를 저장할 수 있는 변수를 말한다. 이 말은 메모리의 특정 위치를 저장한다는 말과 같다. 포인터 변수에는 ..
Pointer & Array 포인터와 배열 (Pointer & Array) 배열에 의한 연산은 포인터를 사용해서 할 수 있다. 포인터를 사용하는 것이 더 빠르다. int a[10]; // 크기가 10인 배열 int *pa; // 정수형 포인터 pa = &a[0]; // pa는 a[0]의 포인터 x = *pa // x는 a[0]과 같은 값 *(pa + 1) // a[1] 과 같음 a[i]는 *(a + i)와 같다. 번지 연산 /* 포인터의 뺄셈 - 문자열 길이 반환 */ int strlen( char *s ) { char *p = s; // p 초기화 - s 문자열의 처음을 가리킴 while ( *p != '\0' ) p++; return p - s; // 비교한 문자의 개수, 문자열의 길이를 나타냄 } 포인터에 대한 정수를 더하거나..
Pointer 포인터 (Pointer) 다른 변수의 주소를 그 값으로 가지는 변수이다. 번지를 알아내는 연산자 &를 사용해서 p에 c의 번지를 기억시키는 방법이다. p = &c &연산자는 메모리의 변수나 배열에만 사용할 수 있고, 문자이나 상수 등에는 사용할 수 없다. *연산자는 그 포인터가 가리키고 있는 변수나 배열변수의 값을 알려준다. #include /* pointer test */ main() { int x = 1, y = 2, z[10]; int *ip; // 정수형 데이터의 포인터 선언 ip = &x; printf( "ip= %d\n", ip ); // x의 메모리 주소 할당 y = *ip; printf( "y= %d\n", y ); // *ip 와 x 는 같다. *ip = 0; print..
Basic Function C 프로그램은 일반적으로 작은 여러 개의 함수들이 모여서 이루어진 구조로 되어 있다. return문은 호출된 함수로부터 계산된 값들을 호출한 함수로 넘겨주는데 사용되며, return문 뒤에는 어떤 수식이나 다 쓰일 수 있다. 리턴형 함수이름 (매개변수 선언) { 선언문과 다른 문장들 } * 문자열내 패턴찾기 프로그램 #include #define MAXLINE 1000 int getline( char line[], int max ); int strindex( char source[], char searchfor[] ); char pattern[] = "ould"; // 검색할 패턴 main() { char line[MAXLINE]; int found = 0; while ( getline..
제어흐름 문장과 블록 x = 0, i++, printf() 같은 것은 수식(expression)이라 하며, 이들이 세미콜론(;)으로 끝나면 문장(statement)이 된다. 중괄호{}는 여러 개의 선언문이나 문장을 모아서 복합문이나 블록을 구성한다. 중괄호로 묶인 복합문은 구문상으로 단일문장과 동일한 기능을 수행한다. 블록의 끝을 나타내는 오른쪽 중괄호 뒤에는 세미콜론이 올 수 없다. if-else문 수식값이 참이면 문장1을 수행하고, 거짓이면 문장2를 수행한다. if ( expression ) statement1 else statement2 else-if문 수식값이 참이면 바로 밑 문장을 수행하고, 거짓이면 다음 수식으로 넘어가는 과정을 반복한다. if ( expression ) statement else if..