제 22장 포인터와 배열의 이해! 함께 이해하기 - 2
● 포인터와 배열을 통해서 얻을 수 있는 중대한 결론
- arr[i] == *(arr+i); // arr이 "포인터"이거나 "배열이름" 인 경우
예제)=============================================================
#include <stdio.h>
int main()
{
int Array[2] = {10, 20};
int* pArray = Array; // pArray는 배열Array를 가리킨다.
printf("Array[0] = %d \n", Array[0]); // Array[0]값 출력
printf("*(pArray) = %d \n", *(pArray)); // pArray가 가리키는 값출력
printf("\n");
printf("Array[1] = %d \n", Array[1]); // Array[1]값 출력
printf("*(pArray+1) = %d \n", *(pArray+1));
// pArray가 가리키는 주소값 4byte만큼 더 증가.. 즉, 다음 배열요소값을 출력
// 4byte를 건너뛰었기때문에 역시나 배열도 자료형을 가진다는 의미이다
printf("*(Array+1) = %d \n", *(Array+1)); // Array[1] == *(Array+1) == *(pArray+1)
return 0; // 배열이름은 포인터닷!
}
// 자 이해못하신분들은 밑에 그림을 보고 이해해볼까요?
그림참고이해)
=================================================================
● 문자열 표현 방식의 이해
- 배열 기반의 문자열 변수
- 포인터 기반의 문자열 상수
> char str1[5] = "abcd"; // 문자열을 담아서 변수다.
> cahr *str2 = "ASDF";
예제)=============================================================
#include <stdio.h>
int main()
{
char str1[5] = "abcd";
char* str2 = "ASDF";
printf("str1 = %s \n", str1);
printf("str2 = %s \n", str2);
str1[0] = 'k'; // 배열요소의 값을 변경한다.
// str2[0] = 'k' ===> Error!...상수이기때문!
printf("str1 = %s \n", str1);
printf("str2 = %s \n", str2);
return 0;
}
=================================================================
● 포인터 배열
- 배열의 요소로 포인터를 지니는 배열
> int* Array1[10];
double* Array2[20];
char* Array3[30];
예제)=============================================================
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int c = 30;
int* Array[3] = {&a, &b, &c};
printf("*Array[0] = %d \n", *Array[0]);
printf("*ARray[1] = %d \n", *Array[1]);
printf("*Array[2] = %d \n", *Array[2]);
return 0;
}
그림참고이해)
예제)=============================================================
#include <stdio.h>
int main()
{
char* Array[3];
Array[0] = "Today is Good day";
Array[1] = "Someboy call me";
Array[2] = "Konichwa";
// char* Array[3] = {0x1000, 0x2000, 0x3000};
printf("Array[0] = %s \n", Array[0]);
printf("*(Array+1) = %s \n", *(Array+1));
printf("*(Array+2) = %s \n", *(Array+2));
return 0;
}
그림참고이해)
Tip) 모든문자열은 선언과 동시에 메모리공간이 올라가고
그 후 그 문자열의 주소값(첫글자의 주소값)이 리턴된다.
// 매우중요한 내용이므로 절대!!, 꼭 13장 그냥 넘어가면 안됩니다!
'프로그래밍 > C' 카테고리의 다른 글
제 24장 포인터와 함수에 대한 이해 - 2 (0) | 2010.07.10 |
---|---|
제 23장 포인터와 함수에 대한 이해 - 1 (0) | 2010.07.10 |
제 21장 포인터와 배열의 이해! 함께 이해하기 - 1 (0) | 2010.07.10 |
제 20장 포인터의 이해 - 그림표현 (0) | 2010.07.10 |
제 19장 포인터의 이해 - 예제분석 (0) | 2010.07.10 |