일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스펙정보
- gbd-200
- 코로나바이러스
- 스마트시티
- 5G
- move앱
- 성능측정
- 사양정보
- 한국판뉴딜
- 韓国ヒップホップ
- QA
- 일본유학
- 부자아빠가난한아빠
- 사용자100명
- 정보처리기사
- 일본대학원
- 동시접속
- certification
- ios
- 4차산업
- 200-301
- 韓国
- 리눅스
- 다음메일
- 명령어
- JMeter
- 환경정보
- 사양
- DevNet
- ads.txt
Archives
- Today
- Total
IT 컴퓨터공학 자료실
초급편 4. 주소 가져오기 본문
포인터 토대가 된 책
주소 가져오기
그래서, 포인터는 그 주소로 주소가 가리키는 메모리를 참조하는 기능과 단순한 수치로 그에 대한 가산하거나 할당하거나하는 기능의 두 가지 측면이 있음을보고왔다.
C 언어에서 변수로 사용되는 것은 원칙적으로 모든 주소를 검색 할 수있다.
예를 들어
int x; / * 예를 들어 1000 번지 * / int * p; void main () { x = 10; / * 1000 번지가 10이 * / p = & x; / * p = 1000 * / * p = 33; / * 1000 번지 33합니다. * / printf ( "x = % d \ n", x); }
을 실행하면 10이 아니라 33을 출력한다. & 기호는 변수 x의 주소를 취득하는 것을 나타내, "p = & x;"는 변수 x의 주소 (구체적인 수치로는 모르는 경우가 많다)를 포인터 변수 p에 대입하고있다 . 그리고 포인터 변수 p가 가리키는 주소를 33로 고쳐 쓰고있다. 이를 통해 변수 x의 값이 쓰 바뀌는 것이다. 이때 포인터 변수 p는 변수 x의 별명으로서 기능하고있다.
이를 의사 어셈블러로 쓰면
MOV [1000], 10 ; x = 10 MOV AX, 1000 ; p = & x MOV [AX] 33 ; * p = 33
라고 바람 대응 관계가된다.
그래서 다음과 같은 것도 가능하다.
int x = 10; / * 예를 들어 1000 번지 * / int y = 12; / * 예를 들어 1004 번지 * / int z = 99; / * 예를 들어 1008 번지 * / int * p; void main () { p = & x; / * p = 1000 * / * p = 0; / * 1000 번지를 0으로 설정 * / p = & y; / * p = 1004 * / * p = 0; / * 1004 번지를 0으로한다 * / p = & z; / * p = 1008 * / * p = 0; / * 1008 번지를 0으로 설정 * / printf ( "x = % dy = % dz = % d \ n", x, y, z); }
이 경우 x도 y도 z도 모두 0이된다. 변수 형식이 일치하는 한 어떤 변수의 주소를 포인터 변수에 대입 할 수있는 것이다.
&에 의해 어떤 변수의 주소를 가져올 수 있는지 지금보고왔다. 그러나 배열의 경우에는 &를 사용할 필요가 없다. 배열 선언 할 때 배열 이름은 그대로 포인터로 해석된다.
int x [5] = {1, 2, 3, 4, 5}; int * p; void main () { int i; p = x; for (i = 0; i <5; i ++) { * p = 0; p ++; } }
배열 x의 값은 0이된다. 이때 "p = x;"의 형태로 대체하고 있음에주의한다. 이 배열을 중간에서 액세스하기 위해서는 "p = & x [3];"처럼하고 &를 사용하여 대입한다.
과제
- 프로그램 4-3 다음 함수를 추가하여 포인터의 값을 확인 해보자.
printf ( "x = % py = % pz = % pp = % p p-self = % p \ n", & x & y & z, p & p);
- 다음 프로그램을 실행했을 때의 출력은 어떻게 될지 미리 예상 한 후 실제로 프로그램을 작성하고 예상을 체크해 보자.
char str [] = { "test string"}; void main () { int i, len; len = strlen (str); for (i = 0; i <len; i ++) { printf ( "% s \ n", & str [i]); } }
'컴퓨터공학 > 포인터' 카테고리의 다른 글
초급편 6. 함수 호출 방법 (0) | 2015.06.30 |
---|---|
초급편 5. 포인터의 형태 (0) | 2015.06.30 |
초급편 3. 문자열 처리 (0) | 2015.06.30 |
초급편 2. 유사 어셈블리의 정의 (0) | 2015.06.30 |
초급편 1. 변수 란 무엇인가? (0) | 2015.06.30 |