일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 파일시스템과파티션 #포렌식 #사이버포렌식 #Encase #Forensic #파티션 #파일시스템 #정보보안
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #bruteFource #무차별공격
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터 #c언어포인터연산
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c2차원배열동적할당 #c언어동적할당 #c동적할당 #c언어동적할당2차원배열
- c언어문자열처리방법 #c언어문자열
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c배열포인터 #c언어포인터 #c언어배열포인터 #배열포인터
- C언어 #C #C프로그래밍 #프로그래밍 #언어
- c언어malloc #동적할당 #c언어동적할당 #c언어malloc사용하기
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터배열 #c언어포인터 #포인터 #c포인터
- XSS #ReflectedXSS
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #phpcodeinjection #injection
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터와문자열 #c언어문자열
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #로또번호생성 #로또번호만들기 #중복제거 #중복제거알고리즘
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #CSRF #
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #robots.txt #검색엔진노출
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #xss #storedxss #CrossSiteScripting
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #commandinjection
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #포인터 #포인터변수 #c언어주소 #주소
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #BrokenAuthentication
- #FAT파일시스템 #파일시스템구조 #파일시스템 #Forensic #정보보안 #IT
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #C동적메모리할당 #malloc #메모리
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #SQLi #TimeBaseSQLi #sqlinjection
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #IT #PUT메소드 #PUT #HTTP메소드 #취약점
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #Call by value #Call by reference
- 사이버포렌식 #포렌식 #FAT
- 포렌식 #사이버포렌식 #Forensic #정보보안 #IT
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #선택정렬 #선택정렬알고리즘
- beebox #bWAPP #webhacking #web #웹해킹 #정보보안 #SQLi #sqlinjectioon
- C언어 #C #C프로그래밍 #프로그래밍 #언어 #c언어포인터의포인터 #c언어2중포인터
- Today
- Total
Hello Security World
C언어 [C언어 배열 포인터] 본문
C언어 배열 포인터
포인터 변수를 사용해서 데이터를 처리하기 위해서는 메모리에 저장된 데이터 타입과 동일한 데이터 타입을 갖는
포인터 변수가 필요하며, 이 때 사용하는 포인터를 '배열 포인터' 라고 한다. 다차원 배열은 배열이 배열 요소가 되므로
배열형 포인터가 필요하다. 즉, 배열 포인터 는 배열을 가리키는 포인터를 의미하며 부분 배열을 배열 요소로 갖는
다차원 배열을 처리하는데 사용되는 포인터이다.
쉽게 얘기하면 2차원 이상의 배열을 사용할때 해당 자료형을 저장하기 위한 것 그리고 , 함수의 파라미터 값으로 인자를 넘길때 실 매개변수 에서 배열을 받기 위한 방식이다.
예제) 배열 포인터의 사용 예시
1 2 3 4 5 6 7 | \배열 요소의 데이터 타입 (*포인터 변수)[배열의 크기]; int arr[2][3]; int (*ptr)[3]; point = arr; // 배열명은 배열의 시작주소를 의미하기 때문에 & 생략 |
예제) 배열 포인터를 사용하여 2차원 배열을 처리하는 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main() { int arr[2][4] ={{10,20,30,40},{40,30,20,10}}; int (*ptr)[4] = arr; int row,col; //행 , 열 for(row=0;row<2;row++) { for(col=0;col<3;col++) { printf("[%d]",ptr[row][col]); } printf("\n"); } } |
아마 int (*ptr)[4] = arr; 이 부분이 햇갈릴것이다 분명 배열은 2차원인데 배열 포인터로 받을때는 1차원으로 받는가? 에 대한 고민을
했을거라고 생각한다.
10 배열 [0][0] | 20 배열 [0][1] | 30 배열 [0][2] | 40 배열 [0][3] |
40 배열 [1][0] | 30 배열 [1][1] | 20 배열 [1][2] | 10 배열 [1][3] |
위와 같이 배열이 있다고 하자 int (*ptr)[4] 이 의미하는 것은 4byte공간이 4개 있다라고 알려주는 것이다. 1차원으로 생각하면
1차원짜리 배열 2개가 있고 열은 4개가 있는것이다 그래서 컴파일러 에게 1차원 int형 4byte 공간 4개가 있다 라고 하는것이다.
int (*ptr)[4] = arr; 이 의미하는것은 1차원짜리 배열공간이 4개가 있고 '행' 을 알려주는것이다 arr은 행을 가지고 있다고 생각하자.
쉽게 이해하기 위하여 위와 같이 설명을 하였다.
그렇다면 왜 배열 포인터를 사용하는것일까?
그 이유는 다차원의 배열을 저장하는 방법 때문이고 함수로 파라미터 인자값으로 형식 매개변수가 받을때 문제가 발생하기 때문이다.
물론 배열 포인터를 사용하지 않아도 가능하다 내부적으로 컴파일러가 알아서 처리하기 때문에.
하지만 C언어를 배우는 사람이라면 포인터를 사용할 줄 알아야한다.
1. 배열 포인터 사용하여 다차원 배열 함수 인자 전달받기.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> //배열 포인터로 함수 인자 받기 char print(char (*pointer)[8]); //출력함수 int main() { char str[3][8]={"hello","pointer","good"}; print(str); return 0; } char print(char (*pointer)[8]) //출력함수 { int i; for(i=0;i<3;i++) { printf("%s\n",pointer+i); } return 0; } 실행결과 hello pointer good |
위와 같은 형태로 배열 포인터를 사용하여 함수의 매개변수로 받을수 있는 방법이 있다.
2. 배열 포인터 사용하지 않고 다차원 배열 함수 인자 전달받기.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> //다차원 배열 함수 인자로 전달하는 프로그램 char print(char pointer[][8]); int main() { char str[3][8]={"hello","pointer","good"}; print(str); return 0; } char print(char pointer[][8]) //출력함수 { int i; for(i=0;i<3;i++) { printf("%s\n",pointer+i); } return 0; } 실행결과 hello pointer good |
결과는 동일핟 배열 포인터를 쓰지 않아도 '열'의 갯수만 알려주면 동일한 결 과를 출력 할 수 있다.
'프로그래밍 > C' 카테고리의 다른 글
C언어 [C언어 동적 메모리 할당 예제] (0) | 2020.05.03 |
---|---|
C언어 [C언어 포인터의 포인터] (0) | 2020.05.03 |
C언어 [C언어 포인터 배열] (0) | 2020.05.03 |
C언어 [C언어 문자열 처리 방법] (0) | 2020.05.03 |
C언어 [C언어 포인터의 연산] (0) | 2020.05.03 |