일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #SQLi #TimeBaseSQLi #sqlinjection
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터 #c언어포인터연산
- 사이버포렌식 #포렌식 #FAT
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #포인터 #포인터변수 #c언어주소 #주소
- 포렌식 #사이버포렌식 #Forensic #정보보안 #IT
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터의포인터 #c언어2중포인터
- 파일시스템과파티션 #포렌식 #사이버포렌식 #Encase #Forensic #파티션 #파일시스템 #정보보안
- #FAT파일시스템 #파일시스템구조 #파일시스템 #Forensic #정보보안 #IT
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #Call by value #Call by reference
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #phpcodeinjection #injection
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #로또번호생성 #로또번호만들기 #중복제거 #중복제거알고리즘
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #선택정렬 #선택정렬알고리즘
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #bruteFource #무차별공격
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터와문자열 #c언어문자열
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #commandinjection
- XSS #ReflectedXSS
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #PUT메소드 #PUT #HTTP메소드 #취약점
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT
- C언어 #C #C프로그래밍 #프로그래밍 #언어
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c배열포인터 #c언어포인터 #c언어배열포인터 #배열포인터
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #C동적메모리할당 #malloc #메모리
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c2차원배열동적할당 #c언어동적할당 #c동적할당 #c언어동적할당2차원배열
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #CSRF #
- c언어문자열처리방법 #c언어문자열
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #xss #storedxss #CrossSiteScripting
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터배열 #c언어포인터 #포인터 #c포인터
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #SQLi #sqlinjectioon
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #BrokenAuthentication
- c언어malloc #동적할당 #c언어동적할당 #c언어malloc사용하기
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #robots.txt #검색엔진노출
- Today
- Total
Hello Security World
C언어 [C언어 주소와 & 포인터] 본문
포인터의 개념
C언어에서 포인터는 상당히 중요한 부분이다. 변수 또는 배열을 선언하였을 경우 값이 저장되는 주소
를 활용하는 방법을 '포인터' 라고 하며, 이 때 특정 주소에 저장되어 있는 값을 나타내도록 하는 변수를
'포인터 변수' 라고 한다. 포인터 변수는 일반 변수 'po' 와 다르게 변수의 앞에 '*'를 붙혀 '*po'라고 한다.
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 | #include <stdio.h> void main() { int num = 10; int * ptr; ptr = # printf("포인터 ptr이 가리키는 값 : %d \n", *ptr); printf("num에 저장된 값 : %d \n\n",num); *ptr = 20; printf("포인터 ptr이 가리키는 값 : %d \n", *ptr); printf("num에 저장된 값 : %d \n\n",num); (*ptr)++; printf("포인터 ptr이 가리키는 값 : %d \n", *ptr); printf("num에 저장된 값 : %d \n\n",num); } 결과값 : 포인터 ptr이 가리키는 값 : 10 num에 저장된 값 : 10 포인터 ptr이 가리키는 값 : 20 num에 저장된 값 : 20 포인터 ptr이 가리키는 값 : 21 num에 저장된 값 : 21 |
위와 같이 실행 결과 를 통해 알 수 있다. 즉 포인터 변수는 어떠한 변수의 주소를 담기위한 변수이다.
그릇을 예로 들자면 변수와 변수는 타입이 같을경우 서로 같은그릇에 담을수 있다 하지만 '변수의 주소' 를 담기위해서는
변수를 담는 그릇인 '포인터 변수' 를 선언 하고 '포인터 변수' 에 값을 대입 해야한다.
int a = 40;
int* p;
p = &a;
이런식으로 말이다. &앰퍼샌드 연산자는 주소를 의미한다. 따라서 '포인터 변수'에 주소를 담기 위해선 &앰퍼샌드 연산자를 활용하여
'포인터 변수' *p 에 담는것이다.
예제) SWAP a,b의 변수의 값을 swap함수에서 바꿔라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void swap(int*a_a,int*b_a){ int temp = *b_a; *b_a=*a_a; *a_a=temp; } void main(){ int a=10, b=20; swap(&a, &b); printf("%d %d",a,b); } 결과 값 : 20 10 |
포인터를 설명할때 가장 많이 쓰이는 예라고 할수 있다 함수의 Call By Reference와 같은 원리이다.
스텍 프레임안의 함수영역에 접근 할 수 있는 방법은 오로지 '주소' 밖에 없다.
따라서 위의 코드는 변수 a와 변수 b의 &주소 를 보냄으로서 swap 함수가 main함수의 a,b 변수에 접근이 가능하게 되고
'*포인터' 를 이용하여 해당 주소에 담긴 값(value) 에 접근 할 수 있는것이다.
포인터 변수와 주소를 사용하지 않았다면 위의 SWAP은 실패하였을 것이다. 함수의 스쿠퍼 영역때문에 swap함수가 main함수에
접근하지 못하는것이다.
'프로그래밍 > C' 카테고리의 다른 글
C언어 [C언어 문자열 처리 방법] (0) | 2020.05.03 |
---|---|
C언어 [C언어 포인터의 연산] (0) | 2020.05.03 |
C언어 [로또번호 생성기 & 중복제거] (0) | 2020.05.03 |
C언어 [Call By Value & Call By Reference] (0) | 2020.05.03 |
C언어로 배우는 자료구조 [선택정렬] (0) | 2020.05.03 |