2010. 7. 10. 02:11

제 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장 그냥 넘어가면 안됩니다!

Posted by 토실토실천재