- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Shell script
- Java
- System
- 쉘 스크립트
- Python
- 프로젝트
- GUI
- 메소드
- GPIO
- Android
- centos docker
- 클라우드
- 라즈베리파이
- 그라파나
- docker
- synology
- JSP
- 리눅스
- 쉘 스크립트 if문
- Linux
- RaspberryPi
- LEVIATHAN
- nginx
- ACL
- 쉘 스크립트 기초
- Tkinter
- 네트워크
- 안드로이드
- API
- 자바
- Today
- Total
IT창고
C 포인터(Pointer) 본문
C언어의 포인터(Pointer)에 대해 알아보겠습니다. 포인터는 메모리 주소를 저장하는 변수로 다른 값이 저장된 공간(변수)를 가르킵니다.
사용방법은 type * 포인터변수명 으로 포인터변수의 type은 가리킬 변수의 type과 일치해야만 합니다.
포인터의 주소값의 범위는 4byte임으로 포인터 변수의 크기는 4byte라고 할수있습니다.
- 주소를 다루는 방법 : &연산자 (주소연산자) 시작주소를 가르쳐줍니다. (type크기에 맞게 알아서 공간 사용)
- 포인터를 다루는 방법 : *연산자 (간접 참조 연산자) ex) int *pNum= NULL; //NULL은 초기화값 (NULL은 정수 0)
포인터에서 0은 주소 값이 0이다가 아닌 가르키는 주소가 없다고 해석하면됩니다. 메모리주소상 0이란 주소는 없습니다.
위의 사진에서 변수pNum와 &iNum은 같습니다다 즉 iNum변수의 주소값입니다.
그리고 *pNum와 iNum도 같습니다 즉 iNum 변수의 값입니다.
*pNum는 자신의 공간의 주소를 따라가서 그 공간의 값을 사용합니다.(간접 참조)
아래와 같은 경우는 포인터사용의 잘못된 예시입니다.
int iNum=0;
int *pNumtest = NULL;
*pNumtest = iNum;
printf("pNumtest = %d\n", *pNumtest);
pNumtest의 포인터 변수의 값은 NULL(0) 입니다 이것은 간접참조(*)할 공간이 없기때문에 에러가 발생합니다.
포인터를 사용하는 이유는 함수의 수행문에서 함수 외부의 변수를 접근하는 경우나 동적할당 할 경우에 사용합니다.
함수에서 매개변수를 통해 값을 전달 받는 방법
1. Call by Value
- 값에 의한 호출
- 우리가 여태 함수를 호출했던 형태
- 실제 '값'을 전달 받는다
2. Call by Reference (address)
- 참조에 의한 호출 (주소에 의한 호출)
- 포인터변수를 매개변수로 사용하여 '주소 값'을 받는다(함수 외부의 변수를 접근 할수 있다)
위의 예시로 더 자세히 살펴볼수있습니다.
SwapValue함수를 수행할때는 정상적으로 숫자가 바뀌지만 함수가 끝난후 main에서 보면 숫자가 바꿔있지않습니다. SwapValue 호출 시 각 변수에 저장된 실제 '값'을 전달하고 iNum1,iNum2는 값만 전달해줬기 떄문에 영향이없습니다.
SwapRef함수는 함수가 끝난 후에도 숫자가 바꿔있습니다. SwapRef호출 시 각 변수의 주소 값을 전달하고 함수 내부에서 main()의 iNum1, iNum2 공간을 직접접근하여 값을 변경하였기 때문입니다.
Tip
파이썬 문법에서는 iNum1, iNum2 = iNum2, iNum1 이 문법이 가능합니다.
'프로그래밍 > C' 카테고리의 다른 글
C 동적할당 (0) | 2018.06.05 |
---|---|
C 구조체(Struct) (0) | 2018.06.04 |
C 배열(Array) (0) | 2018.05.29 |
C 함수 연습문제 (0) | 2018.05.24 |
C Function (함수) (0) | 2018.05.24 |