2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며, 반드시함수호출문에의해서만실행 2. 함수의정의 - 함수의이름과 () 괄호로구성 - 머리 (header) 부분 - 명령문이존재할수있는중괄호로구성된몸체 (body) 함수이름 () 변수선언및실행문장들 ; : #include<stdio.h> void sub(); // 함수의선언 void main()... sub(); // 함수호출 void sub() // 호출되는함수 ( 피호출함수 ) 의정의... - 1 -
3. 함수의자료형 ( 되돌려줄값의자료형 ) 함수는어떠한값을자기를호출시켜준함수에게다시되돌려줄수있는기능이있다. 바로이기능이 return( 리턴 ) 이라는기능이다. #include<stdio.h> int cal(); // 함수 ( 피호출함수 ) 의선언 int main() int add = cal(); // cal() 함수의호출및리턴대기 printf(" 덧셈의결과값 : %d\n",add); return 0; int cal() // 정수형리턴정의 int a=20, b=30, add; add = a + b; return add; // add변수를리턴 - 2 -
학습내용 2 : 포인터 1. 포인터 - 포인터는메모리를사용하는또다른방법이다. - 주소연산자로변수가할당된메모리의위치를확인한다. - 포인터로가리키는변수를사용할때간접참조연산자를쓴다. 사용기능 int num; 정수형 num 선언 char *pc 문자형포인터변수 pc 선언 int *pnum 정수형포인터변수 pnum 선언 double *pdnum; 더블형포인터변수 dnum 선언 int *p 정수형포인터변수 p 선언 p = &num 포인터변수 p 에 num의주소값입력 ( 포인터초기화 ) *p = 10 포인터포인터가가르키는변수에 10의값을입력 &100 &101 &102 &103 &104 &105 &106 &107 &108 &109 &110 #include<stdio.h> int main() int num, num2; int *pnum; pnum = # num = 30; *pnum = 50; pnum = &num2; return 0; - 3 -
2. 인수를가지는함수 모든함수는함수의호출에의해서만실행된다고하였다. 그러면실행제어권이호출함수에서피호출함수로넘어가게된다. 그리고피호출함수의실행이모두마치게되면다시호출함수에게로실행제어권이넘어가게되는것이다. 이렇게함수와함수끼리는서로서로실행제어권을주고받듯이특정값 ( 변수라든가상수등 ) 서로같이주고받을수있다. &100 &101 &102 &103 &104 &105 &106 &107 &108 &109 &110 &111 &112 &113 &114 &115 #include<stdio.h> int function(int a, int b); // function() 함수의선언 void main() int num; num = 10; swap(mum); int function()(int n1, n2) // function() 함수의정의 printf("%d %d = %d\n", n1, n2); return 0 &116-4 -
3. Call By Value( 값에의한함수호출 ) - C언어에서함수로의데이터전달방법으로는크게실제값을전달시켜주는방식 &100 #include<stdio.h> int function(int a, int b); // function() 함수의 &101 선언 &102 void main() &103 &104 int x, y; &105 x = 10, y = 20; &106 printf("%d %d = %d\n", x, y); &107 swap(x, y); printf("%d %d = %d\n", x, y); &108 &109 &110 int swap(int a, int b) // function() 함수의정의 &111 &112 int temp &113 temp = a; a = b; &114 b = temp; &115 printf("%d %d = %d\n", a, b); return 0 &116-5 -
4. Call By Reference ( 주소에의한함수호출 ) 실제값이존재하는메모리공간의주소를전달해주는방식 주소연산자와포인터연산자를이용해서함수간에주소를전달하는방법 &100 #include<stdio.h> &101 &102 &103 &104 &105 &106 &107 &108 &109 &110 &111 &112 int function(int *a, int *b); void main() int x, y; x = 10, y = 20; printf("%d %d = %d\n", x, y); swap(&x, &y); printf("%d %d = %d\n", x, y); int swap(int *a, int *b) int temp temp = *a; &113 *a = *b; &114 *b = temp; &115 printf("%d %d = %d\n", a, b); return 0 &116 학습내용 3 : 구조체 1. 구조체 - 하나이상의기본자료형을기반으로사용자가임의로정의한자료형의모음 - 서로다른타입을하나의구룹으로묶는것 struct 구조체형이름 데이터형식멤버변수 1; 식멤버변수 2;... ; struct 구조체형이름구조체변수 ; 데이터형 struct point int x; int y; ; - 6 -
멤버변수 : 구조체안에서정의된변수로일반적인변수선언과동일 구조체의멤버로는배열, 포인터변수, 이미정의된다른구조체의변수등모든응용자료형을사용할수있다. 2. 구조체의사용 struct point int x; char y; ; int main() struct point pin; // 객체 pin 선언 p1.x=10; // p1의멤버 x에 10 대입 p1.y= k ; // p1의멤버 y에 x 대입... return 0; 3. 구조체초기화 : 중괄호 ( ) 안의초기값을콤마 (,) 로분리하여대입 struct point int x; double y; ; int main() struct point pin = 10, 10.5; // 객체선언과함께초기화 4. 구조체배열 #include <stdio.h> struct student char name[10]; int kor; int eng; float avg; ; int main() struct student s[3]; - 7 -
5. 구조체포인터 #include <stdio.h> struct student char name[10]; int kor; int eng; float avg; ; int main() struct student s; struct student *p; p=&s; s.kor = 50; p->kor=50; (*p).kor=50; // s를이용한직접표현방식 // *p를이용한간접표현방식 // *p를이용한직접표현방식 학습내용 4 : Atmel Studio 6.2 설치 1. Atmel Studio 6.2 * Studio 란? - http://www.atmel.com/ AStudio6_2_1153 버전 - 8 -
2. Atmel Studio 6.2 설치방법 - 9 -
- 10 -
- 11 -
- 12 -
- 13 -
- 14 -
학습정리 1. 기본적인 C 언어에대해서알아보았습니다. 2. 실습을통하여마이크로프로세서에필요한 C 언어에대하여자세히알아보도록하겠습니다. - 15 -