일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 포인터
- Google reCaptcha
- java
- 자바
- SQL
- C언어 변수
- URL 다운로드
- Oracle
- gcc
- 텍스트 파일 읽기
- C언어
- Naver SmartEditor
- 날짜
- TCP/IP 소켓
- 역순
- C언어 구조체
- Spring email
- C언어 메모리
- placehoder
- Vim
- Spring google
- C언어 함수
- 오라클
- C언어 파일입출력
- C언어 매크로
- HTML5
- jsp
- GUI
- 구글 reCaptcha
- C언어 배열
- Today
- Total
easy software
C언어 다차원 배열과 포인터의 이해1 본문
안녕하세요. 이번 시간에는 이론 위주로 글을 작성하려 합니다.
포인터의 막바지라고 말씀드릴 수 있겠네요.
너무 장황하게 설명드리지 않고, 요점만 딱딱 찝어서 글을 작성하겠습니다.
2차원 배열 int a[3][2]; 선언
int a[3][2] = {1, 2, 3, 4, 5, 6};
printf("a[0] : %d \n", a[0]);
printf("a[1] : %d \n", a[1]);
printf("a[2] : %d \n", a[2]);
printf("a : %d \n", a);
위의 코드를 실행하면 어떤 값이 출력될까요?
a[0] ~ a[2]까지는 8바이트씩 차이나는 주소값이 출력됩니다.
그리고 a[0]와 a의 값은 같습니다.
즉 a[0]은 a[0][0] 을 가리키고,
a[1]은 a[1][0]을 가리키게 됩니다.
그리고 a는 배열의 가장 앞인 a[0][0]을 가리키게 됩니다.
왜 8바이트씩 차이가나는 값을 출력했는지 대충 감이오시나요?
int형 배열이기 떄문에 4바이트, 각 a들이 가리키고있는 곳은 행의 가장 앞부분입니다.
즉, a[0] 다음에 a[1]을 출력하면 a[0][1]은 건너뛰게 되는것이죠. 그렇기 때문에
sizeof(int) * 배열 가로길이(2) = 8 이라는 값이 계산이 되는 것입니다.
그럼 아래의 코드는 값이 어떻게 출력될까요?
int a[3][2] = {1, 2, 3, 4, 5, 6};
printf("a : %d \n", a);
printf("a+1 : %d \n", a+1);
printf("a+2 : %d \n", a+2);
위의 코드와 동일한 값이 출력되지 않나요?
a+1은 a[1][0]을 가리키고, a+2는 a[2][0]을 가리키게 됩니다.
그림으로 한눈에 파악해 보시죠.
그림을 보시고, 그리고 제 설명을 보셨다면 100%까지는 아니더라도,
어느정도 감은 잡히시리라 믿습니다.
그럼, 이번글의 마지막으로 간단한 질문하나를 드리겠습니다.
#include<stdio.h>
int main(void)
{
int arr[3][2] = { 1, 2, 3, 4, 5, 6 };
printf("arr: %d \n", sizeof(arr));
printf("arr[0] : %d \n", sizeof(arr[0]));
printf("arr[1] : %d \n", sizeof(arr[1]));
printf("arr[2] : %d \n", sizeof(arr[2]));
return 0;
}
위의 값을 출력해보시면, 순서대로 24, 8, 8, 8이 출력됩니다.
왜 그럴까요?
분명히 arr과 arr[0]를 같은 개념으로 생각하시는 분들도 계실겁니다.
하지만, 제가 위에서 언급했듯이
arr[0]은 arr[0][0]이 있는 행의 가장 앞을 가리키고,
arr[1]은 arr[1][0]이 있는 행의 가장 앞을 가리킵니다.
그리고 arr자체는 그 배열 덩어리 전체의 가장 처음을 가리킵니다.
즉, arr[0]의 sizeof를 하게되면, arr[0]이 가리키고 있는 행 전체크기를.
arr[1]은 arr[1]이 가리키고 있는 행 전체 크기를,
arr은 본인이 가리키고있는 배열 전체의 크기를 반환하게 되는 것입니다.
오늘은 이상으로 글을 마치겠습니다.
다음시간에도 다차원 배열과 포인터의 이해를 도와드리겠습니다.
'C언어 > 포인터와 배열' 카테고리의 다른 글
C언어 다차원 배열과 포인터의 이해3 (0) | 2015.01.27 |
---|---|
C언어 다차원 배열과 포인터의 이해2 (0) | 2015.01.27 |
C언어 포인터를 이용하여 Max/Min(최댓값/최솟값) 구하기 (0) | 2015.01.27 |
C언어 2차원배열을 이용한 성적관리 프로그램 (0) | 2015.01.25 |
C언어 2차원배열에 구구단을 저장하고 출력해보자 (0) | 2015.01.25 |