일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 사양
- 4차산업
- 200-301
- 동시접속
- 韓国
- 리눅스
- 환경정보
- 부자아빠가난한아빠
- JMeter
- 일본대학원
- 정보처리기사
- 사양정보
- move앱
- ios
- 코로나바이러스
- 일본유학
- 스마트시티
- 성능측정
- 한국판뉴딜
- 명령어
- 다음메일
- 사용자100명
- ads.txt
- QA
- 5G
- gbd-200
- 스펙정보
- 韓国ヒップホップ
- DevNet
- certification
- Today
- Total
목록컴퓨터공학/포인터 (17)
IT 컴퓨터공학 자료실
포인터 토대가 된 책 스택과 자동 변수malloc (3)는 메모리를 확보하고, malloc (3)을 설명 할 때 언급했다. 그러나 하나의 프로세스가 사용하는 메모리에는 여러 종류가있다. 표준 UNIX에서는 가상 메모리와 함께 다음 레이아웃 메모리가 사용된다.00000000 여유 메모리 (NULL 포인터에 의한 참조를 검출한다) 00001000 코드 세그먼트 (CS)의 시작 00001FFF 코드 세그먼트 (CS)의 종료 00002000 데이터 세그먼트 (DS)의 시작 0000FFFF 데이터 세그먼트 (DS)의 종료 00010000 공간의 시작 FFFFC000 스택 탑 FFFFFFFF 스택의 바닥 여기서 중요한 것은 "스택"이다. 데이터에는 두 가지의 구별이있다. 비유로 말하는 것이 좋겠다.예를 들어 기업의..
포인터 토대가 된 책 함수 포인터 사용포인터로 가리킬 수있는 것은 일반 데이터뿐만 아니다. 프로그램의 단편 인 함수조차도 포인터로 포인터 변수에 저장할 수있다. 예를 들어, 조건에 따라 덧셈을 할 것인가 뺄셈을 할 것인지 변화라는 프로그램이 있다고하자.int add (int a, int b) { return a + b; } int sub (int a, int b) { return a - b; } void main () { int cond; int x, y; ....... if (cond == 0) { printf ( "result = % d \ n", add (x, y)); } else if (cond == 1) { printf ( "result = % d \ n", sub (x, y)); } else ..
포인터 토대가 된 책 malloc () 된 포인터 사용 그런데 메모리를 확보 할 유용한 라이브러리 함수 malloc (3)이있다. 이것 자체는 결코 OS의 기능으로 구현되는 시스템 콜은 아니지만 필요에 따라 메모리를 확보하는 시스템 호출 sbrk (2)를 호출한다. malloc (3)는 동적으로 메모리를 확보하기 위해 사용된다. 즉, 런타임에만 크기가 정해지지 않은 배열을 확보하는 데 사용된다. 예를 들어, 편집기 등을 생각해 보면 그 문서를 메모리에 저장하기 위해 메모리가 확보되는 것이지만, 그 크기는 문서의 크기에 의해서만 결정된다.여기에 정적 배열로 확보하면 특정 크기 이상의 파일은 인식 할 수없는 것이다. 이것은 곤란하다. 그래서 이런 경우에는 malloc (3)을 사용하여 동적으로 필요한만큼의 ..
포인터 토대가 된 책 더블 포인터 ** argv 사용이러한 다중 배열을 사용한기구는 C 언어 프로그램에서 많이 사용된다. 대표적인 사례가 명령 줄 인수를 취득하기위한 argc, argv기구이다. 프로그램을 실행할 때,% ls -l -F -a / usr / usr / lib 같이 명령 줄에서 시작한다. 이때 ls 프로그램으로 명령 줄에서 지정된 인수를 프로그램 내부에 들어갈 필요가있다. 이를위한기구로서 argc, argv기구가 준비되어있다.전형적인 C 언어의 main 함수의 정의는 다음이다.int main (int argc, char ** argv) { } 이때 main 함수의 2 개의 인수를 argc, argv라는 이름으로 부르는 것이 상식으로되어있다. (argc = argment count, argv ..
포인터 토대가 된 책 다차원 배열의 실현다차원 배열과 C 언어C 언어는 Fortran이나 BASIC으로 친숙한 다차원 배열을 다루는 수단이 엄격하게 말하면 존재하지 않는다. 이차원 좌표의 개별 값을 저장하는 수단으로 int x [10] [10];과 같은 표현으로 데이터를 확보하고 싶은 것은 어떤 프로그래밍 언어로도 같다. 그러나 C 언어에서 다른 언어로 일반적인 "다차원 배열 '이라는 개념 자체가 존재하지 않기 때문이다. 이유는 정확히 '배열의 배열'이다.그러나 이것은 보통에 결함이 아니다. 대신 데이터 구조로 '디스플레이'로 불리는 데이터 구조를 정의 할 수 있기 때문이다. 디스플레이는 "배열에 대한 포인터 배열 '이다. 즉, 배열에 대한 참조를 가지는 포인터 배열을 정의 할 것이다. 이 모습을 보자...
포인터 토대가 된 책 extern 선언의 함정 - 배열과 포인터의 차이점이러한 배열과 포인터의 차이를 충분히 머리 속에 넣은 다음, 다음 코드를 보자. extern char * str; char * p; p = str; (프로그램 2-1)아무런 특색도없는 코드이지만, str이라는 포인터는 외부 정의가되어있는 것으로되어있다. 그래서이 코드 파일과 다른 파일에서 str의 정의가 이루어지고있는 것이며 링크 할 때 2 개의 파일이 결합되어 하나의 실행 파일이 만들어진다라는 상황 설정이다.이 때 다른 파일의 str의 정의가char * str = "test"; (프로그램 2-2)그렇다면 전혀 문제가 없다. 그러나,char str [] = { "test"}; (프로그램 2-3)인 경우는 결코 제대로 작동하지 않는다...
포인터 토대가 된 책 초기화 문자열의 2 개의 정의지금까지도 "문자열"라는 데이터 오브젝트는 다양한 곳에서 사용왔다. 그러나 그 정의는 직관적 인 것으로 끝 마치고오고있다. 여기서 문자열의 정확한 정의한다. 문자열과 포인터이다.예를 들어 익숙한 표현 printf ( "Hello, world \ n"); (프로그램 1-1)문자열 "Hello, world \ n" 포인터에 다름 없다. 왜냐하면 printf ()의 프로토 타입은 int printf (const char * format, ...);로서, 제 1 인수는 char *이다. 것은 이러한 문자열은 그 자체 포인터 인 셈이다. 이 같은 큰 따옴표로 둘러싸인 표현되는 문자열을 단순한 char *과 구별하여 "문자열 리터럴"라고 부르기로한다.문자열 리터럴은..
포인터 토대가 된 책이진수목록 구조의 응용으로목록 구조를 기초로 다양한 데이터 구조가 만들어진다. 이 예제 중 하나가 "양방향 목록」이지만, 이렇게 2 개의 자기 참조 포인터를 가지고있다 셈이다.struct DList { int data; struct DList * prev; struct DList * next; }; 이 양방향 목록의 경우에는 "하나 앞을 나타내는 포인터 '와'다음을 나타내는 포인터」의 2 개를 가지고있다. 그래서 삽입과 삭제의 경우에는 간단한 목록보다 약간 불편하지만, 어느 방향에서도 체인을 추적 할 수있어 편리하다. 이른바 "관계형 데이터베이스"데이터 구조로 매우 일반적으로 이용되고있다. 즉, 각 행의 데이터 (횡 방향)이 이것으로 표현 된 모든 행에 대한 수직 체인 역시 양방향 목..
포인터 토대가 된 책 리스트 구조구조체를 이용한 응용 예로서 리스트 구조를들 수있다. 리스트 구조는 매우 필수적인 데이터 구조의 하나이며, 응용 범위가 매우 넓다. 이 리스트 구조에 익숙 할 C 언어 초급 졸업 시험이라고해도 과언이 아니다.왜 리스트 구조가 이토록 중요한인가하면, 삭제 및 삽입을 쉽게 할 수 있기 때문이다. 배열의 경우, 특히 삽입은 고비용이다. 배열 데이터 다음에 새로운 데이터를 삽입하려면 그 이후의 데이터를 전부 하나씩 밀어 주어야한다. 삭제의 경우에도 데이터를 채우는 작업을하거나 별도로 플래그를 갖게하고 "잘못된 데이터"를 마킹 해 줄 필요가있다.반면 리스트 구조는 삽입을 낮은 비용으로 할 수 있지만, 대신 배열처럼 인덱스에 의한 랜덤 액세스 할 수 없게된다. 그래서 첨자에 의한 랜..
포인터 토대가 된 책 구조체와 포인터포인터와 구조체와 복합되어 사용되는 경우가 매우 많다. 왜냐하면 구조는 복합 데이터를 구조화하는 수단이며, 따라서 큰 경향이다. 하청 함수에 구조체의 정보를 전달하고자 할 때에는 구조체를 값으로 전달하고 모든 복사하여 전달보다 참조 내게 한 것이 더 효율적이다. 보기 구조체와 배열은 비슷하지만 배열은 배열 이름이 포인터로 해석되었지만 구조가 그런 것은 아니다. 그래서 구조체를 참조로 전달하는 경우에는 처음에는주의해야한다.struct S { char name [10]; int type; }; void sub (struct S * s) { ......... } void main () { struct S a1; sub (& a1); } 특히 라이브러리 함수를 사용할 때주의해..