본문 바로가기

전체 글

(195)
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..
17장 . 포인터의 포인터 [포인터의 포인터] [포인터의 포인터] 포인터도 메모리 공간에 올라가기에 주소값을 가지고 있다. 싱글 포인터의 주소값을 저장하는 용도의 포인터를 더블 포인터라 한다. int a=3; int* b = &a;//싱글 포인터 int **c=*b;//더블 포인터 [Swap 1 : 효과없는 swap 함수의 호출 ()] 값을 복사하여 바꾸기에 변경이 일어나지 않는다. void pSwap(int * p1 ,int * p2) int main(void) { int a=10,b=20; int*pa,int*pb; pa=&a,pb=&b; pSwap(pa,pb); } void pSwap(int *p1,int *p2) { int *temp; temp=p1; p1=p2; p2=temp; } [Swap 2 : 더블 포인터 swap ..
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]..