#include <stdio.h>
//배열에 관한 여러가지 이야기들..
//==============================================================================================
//1. 배열의 크기에 대해서..
/*
void main()
{
//예전 방식의 C : const int sz =10;
// int a[sz]; // sz가 가르키는 메모리에 가서 값을 꺼내게 된다.
// 그래서 예전에는 #define sz 10
//99년 표준화 이후(C99) : int a[sz]; //sz가 10이라는 사실을 컴파일러가
// 또는 C++ //기억하고 있다가 사용
const int sz =10; //int sz =10; error
int a[ sz ]; //?? ok.. sz 상수
//-----------------------------------------------------------------------------------
const int s[3] = {1,2,3};
int b[ s[1] ]; // ?? 될까? //error .. 배열크기 : 컴파일 시간에 알아야 한다.
// s[1] -> *(s+1) 로 해석(compile) <- 실험해봐야 알수 있다.
//-----------------------------------------------------------------------------------
}
void foo(const int s)
{
int b[ s ]; //?? 될까? //error -> 싱행 되어야 알수있다.
//여기서 컴파일 time 과 Runtime 개념을 정확히 알아 두세요..
//-----------------------------------------------------------------------------------
}
*/
//==============================================================================================
//==============================================================================================
//2.배열 포인터 이야기 ..
/*
void main()
{
int *p[3]; //?? int* 3개 짜리 배열
int (*q)[3]; //어떤 의미? int[3]인 배열을 가르키는 포인터 !! 반드시 모양 외워 두세요..
// q 가 100번지라고 가정 한다면
q = q + 1 ; //q의 값은 얼마가 될까 ? ==> int[3] 만큼 증가. -> 112가 된다 !!
printf("%d\n",sizeof( p ) );
printf("%d\n",sizeof( q ) );
}
*/
//==============================================================================================
//==============================================================================================
//3. 다차원 배열과 포인터
/*
void main()
{
//VC6.0 가능 ... C99문법은 type check 가 강화 된다. !!!
// n차 배열은 n번 [] 해야 값이 나온다 !!!
int x [3][2] = { 1,2,3,4,5,6 } ;
int *p = x; //될까 ? //error
int **p = x; //? //error x[1] -> 8번지 증가.
// p[1] -> 7번지 증가.
// 결국 필요한것... p[1] 시 8번지 증가
// 두번 [] 값이 나와야 한다. -> 1차 배열 포인터.
int (*p)[2] = x; // ok...!!!
// 이제 p 와 x는 완전히 동일한 표현이 가능
printf("%d\n", p[1][0] ); // p 는 x와 동일 하게 표현 할수 있다.
//1교시 핵심 !!
//결국 n차 배열 주소는 (n-1) 차 배열 포인터를 사용하면 된다. !!!
//int* p = x; // 의 표현
//정리 : vc 6.0, vc 2003. linux cc -> 모두 warning 처리
//모든 cpp 컴파일러 -> error 처리..
//
//------------------------------------------------------------------------------
printf("%d\n", x[1][1] ); // 4
printf("%d\n", x ); //배열 이름 -> 배열의 시작 주소 100번지 가정.
printf("%d\n", x[1] ); // &x[1][0] = & 와 []는 반대의미 .. !! 결국 108
printf("%d\n", *x ); // 주소 *(x+0) => x[0] = &x[0][0] 결국 주소 100
printf("%d\n", **x ); // ? x[0][0] 즉 값 1 ..
printf("%d\n", *(x[1]+1) ); // x[1][1] = > 4
}
*/
//==============================================================================================
//==============================================================================================
//4. 다차원 배열의 리턴.
//int b;
//int goo();
//int (* foo() )[2]
//다차원 배열을 리턴하는 함수 만들기. - 복잡한 표현이 나오는 이유.. !
/*
//int (* foo() )[2] //1
AR foo() //2
{
static int temp[2][2];
return temp; //2차원 배열 주소 리턴.
}
void main()
{
foo();
}
*/
//==============================================================================================
//==============================================================================================
//5. typedef !!
typedef int(*AR)[2]; //AR은 type 이다. 오늘의 핵심 !!..
void main()
{
int x[3][2] = {1,2,3,4,5,6};
AR p = x; //결국 int(*p)[2] = x; 와 동일.
}
//꼭 기억할 내용.
// 1. 배열의 크기는 -> _________ 시간에 알아야 한다. (컴파일)
// 2. n 차 배열의 주소는 ________차 배열 포인터에 담아야 한다. (n-1)
// 3. 2차원 이상의 배열을 리턴하는 함수 만들기
// 4. typedef 로 간단히 처리 하기 !! ~~~
//==============================================================================================
'프로그래밍' 카테고리의 다른 글
Buffer OverFlow (0) | 2009.07.19 |
---|---|
Asm Ex File (0) | 2009.07.19 |
c언어로 짠 싸이월드 (0) | 2009.07.19 |
처음 C++을 배우며 짜봤던 관리프로그램 (0) | 2009.07.19 |
Primary키로 보관하는 배열공간 작성 (0) | 2009.07.19 |
댓글