본문 바로가기

C

(19)
26장 . 전처리기에 의한 매크로 처리 [전처리기에 의한 매크로 처리] [전처리기에 의한 전처리] 프로그램 작성 -> 컴파일 -> 링크 -> 실행파일 생성 프로그램 작성 -> 전처리 -> 컴파일 -> 링크 -> 실행파일 생성 [#define으로 시작하는 전처리기 지시자] 컴파일러에 의해 처리되는 것이 아니다 전처리기에게 단순 치환 작업을 요청할 때 사용되는 지시자 . #define PI 3.1415 [매크로를 이용한 함수의 구현] [메크로 함수란] 매크로를 기반으로 정의되는 함수 (함수가 아니라 매크로 . 단지 함수의 특성을 지닐 뿐) #define SQUARE1(x) x*x #define SQUARE2(x,y,z) (x+y+z) int main(void) { SQUARE1(3); } 장점 : 자료형에 독립적이며 , 실행 속도가 향상된다 (코..
23장 . 구조체와 사용자 정의 자료형 2 [구조체 변수의 전달과 리턴] [함수의 인자로 전달되는 구조체 변수] 구조체 변수의 인자 전달 방식은 기본 자료형 변수의 인자 전달 방식과 동일하다 구조체 변수의 연산은 대입연산 (=)만 가능하며, 이외의 사칙 연산은 적용 불가 리턴 역시 기본 자료형 변수의 리턴 방식과 동일하다 . struct simple{ int data1; int data2; }; void show(struct simple ts);//call by value void swap(struct simple* ts);//call by reference int main(){ struct simple s={1,2}; show(s); swap(&s); show(s); struct simple s2=s1; show(s2); return 0; } ..
22장 . 구조체와 사용자 정의 자료형 1 [구조체] [구조체] 하나 이상의 기본 자료형을 기반으로 사용자 정의 자료형을 만들 수 있는 문법 요소 struct Point//point 이름의 구조체 선언 { int x; int y; } [구조체 변수 선언] struct point{ int x; int y; }p1,p2,p3;//변수 선언1 struct point2{ int x; int y; }; int main(void) { struct point2 p1,p2,p3;//변수 선언2 p1.x=3;//멤버 접근 struct p4={1,2};//초기화 } [구조체 배열 선언] struct Person{ char name[20]; char phone[20]; int age; }; int main(){ struct Person pArray[3];//배열 선..
19강.함수 포인터와 void포인터 [함수포인터] [함수 포인터의 이해] int aaa(int a,int b) aaa는 값이 0x1000인 상수 포인터 . 해당 번지에는 함수 호출시 실행 될 내용이 저장되어 있다. fct(1,2)이라하면 fct 함수를 호출하며 1,2 인자를 전달 해당 함수포인터가 가리키는 메모리 공간에 함수를 호출하며 인자 전달 [함수이름의 포인터 타입을 결정짓는 요소] 리턴 타입 + 매개변수 => int (*fPtr) (int) 는 리턴값이 int 이고 int를 인자로 받는 모든 함수를 받는 포인터이다. [void포인터] [void 포인터] 자료형에 대한 정보가 제외된 , 주소 정보를 담을 수 있는 형태의 변수 포인터 연산 / 메모리 참조 관련 일에 활용 할 수 없다. int main(void) { char c='c';..
18강 . 다차원 배열 그리고 포인터 [2차원 배열 이름의 포인터 타입] [1차원 배열이름의 포인터 타입 결정 포인트] 포인터가 가리키는 요소의 자료형 포인터 연산시 증가하는 바이트의 크기 그래서 원래는 int * (가리키는 요소의 자료형 ) arr [4] (포인터 연산시 증가하는 바이트 크기) 이지만 배열 이름이 가리키는 요소의 자료형이 일치한다면 , 포인터 연산시 증가하는 값의 크기도 일치하기에 생략하여 int * arr이다. [다배열이름의 포인터 타입 결정 포인트] 포인터가 가리키는 요소의 자료형 포인터 연산시 증가하는 바이트의 크기 포인터가 가리키는 요소의 자료형이 같다해도 포인터 연산시 증가하는 값의 크기가 불일치한다. int a[3][2]={1,2,3,4,5,6}; printf("a[0]:%d\n",a[0]);// 1 printf..
16장 . 다차원 배열 [다차원 배열] [다차원 배열] 2차원 이상의 배열을 의미한다. [2차원 배열의 선언] 2차원적 메모리 구조를 구성한다. 행 단위로 모든요소를 초기화,일부 요소를 초기화가 가능하다 int aaa[3][2]={{0,1,2},{1,2,3},{4,5,6}};//모든 요소 int bbb[3][2]={{0},{1,2,},{1,2,3}};//일부 요소 int ccc[3][2]={1,2,3,4,5,6,7}; int arr1[][]={1,2,3,4,5};//Error int arr2[][3]={1,2,3,4,5,6};//OK! int arr2[2][]={1,2,3,4,5,6};//OK! [2차원 배열의 실제 메모리 구성] 1차원 배열과 동일하지만 ,접근 방식을 2차원적으로 해석 할 뿐이다.
14강 . 포인터와 함수에 대한 이해 [함수의 인자로 배열 전달하기] [기본적인 함수 인자 전달] 값의 복사에 의한 전달 int main(void) { int val=10; int val2=fct(a);//val의 값을 변수 a에 복사 } int fct(int a) { a++; return a; } [배열의 함수 인자 전달] 배열이름 : 포인터에 의한 전달 int main(void) { int arr[2]={1,2}; fct(arr);//포인터의 전달 } void fct(int * arr) { arr[1]=3; } [배열의 이름 , 포인터의 Sizeof 연산] 배열이름 : 배열 전체 크기를 바이트 단위로 반환 포인터 : 포인터의 크기 (4)를 바이트 단위로 반환 int arr[5]={1,2,3,4,5}; int * pArr=arr; prin..
13강 . 포인터와 배열 [포인터와 배열의 관계] [배열의 이름] 배열의 이름은 첫번째 요소의 주소값을 나타낸다.(주소값이 바뀌면 안되기에 이름은 상수) int 형은 배열요소간 주소값이 4 씩 ,double 은 8씩 차이난다. int main(void) { int a[5]={0, 1, 2, 3, 4}; printf("%d, %d \n", a[0], a[1]);//배열 요소 출력. printf("%d 번지 , %d 번지 \n", &a[0], &a[1]);//배열 요소의 주소 출력. printf("배열 이름 : %d \n", a);//배열 이름 출력. } [배열의 이름과 포인터 비교] 배열의 이름은 상수 / 포인터는 변수이다. 공통점은 메모리의 주소를 나타내고 이름이 존재한다는 점이다. int main(void) { int a[5]..