제어문
1.while 문
do while 문 : {}안을 선행처리후 조건을 실행
1 2 3 4 5 | do { }while(조건문); | cs |
일반 적인 while문 : 조건문에 만족할동안 반복
1 2 3 | while(조건문){ } | cs |
EX)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> int main() { int iCnt = 1; int iCnt2 = 1; int iSum1 = 0; int iSum2 = 0; printf("do while\n"); do { iSum1 = iSum1+iCnt; iCnt++; }while(iCnt > 10); printf("%d\n",iCnt); printf("\nwhile\n"); while(iCnt2 > 10) { iSum2 = iSum2+iCnt2; iCnt2++; } printf("%d\n",iCnt2); return 0; } | cs |
12번째줄 : do~while의 경우 조건문이 맞지 않으므로 적어도 한번은 실행됨
21번째줄 : while문에 의해서 조건문이 먼저 체크되므로 {}안의 내용은 적용되지 않음
출력 :
2. for 문
while문과 같은 반복문의 한형태
EX)구구단3단
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> void multiTB(void) { int iCnt; int iNum = 3; int iValue; printf("구구단 %d단 \n\n",iNum); /*********************** while (iCnt <= 9) { iValue = iNum * iCnt; printf("%d * %d = %d\n",iNum,iCnt,iValue); iCnt = iCnt + 1; //++iCnt; 왼쪽을 더 지향함 } ***********************/ for(iCnt = 1; 9 >= iCnt; iCnt++) { iValue = iNum * iCnt; printf("%d * %d = %d\n",iNum,iCnt,iValue); } return; } int main() { multiTB(); return 0; } | cs |
12번째줄 while문으로 작성
21번째줄 for문으로 작성
상단의 그림과 같이 while문을 for문으로 변경가능
출력 :
iCnt가 100의 값을 가질때
++iCnt 과 iCnt++의 차이
++iCnt 처리 순서
1.iCnt = iCnt + 1;
2.A = iCnt;
A에 처음 출력되는 값 = 101;
iCnt++ 처리 순서
1.A = iCnt;
2.iCnt = iCnt + 1;
1 2 3 4 5 6 7 8 | while(1); for(;;){} for(;;); for(;;){ } | cs |
volatile
컴파일러는 불필요한 시간낭비를 막기위해서 자동 최적화를 해서 컴파일 하므로
이것을 막기위해 사용됨
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int main() { volatile int iCnt; /************* for(iCnt = 0; 1000000000 > iCnt; iCnt++) {} // volatile없을때는 내부가 비었으므로 자동 속도 최적화 시켜버림 iCnt = 10억 의 값을 바로 넣어버림 *************/ for(iCnt = 0; 1000000000 > iCnt; iCnt++) {} printf("test\n"); return 0; } | cs |
exe 파일 실행시 약간의 딜레이가 좀더 발생하는것을 볼수있고 cpu 사용율을 보면 조금더 높게 사용하는것을 볼수 있음
3. union (공용체)
구조체 선언시 struct를 union으로 변경한것. struct와의 차이는 변수의 메모리 할당
struct |
변수들에게 각각 메모리 할당하여 저장 |
union |
가장 메모리를 크게 할당이 되는 자료형을 기준으로 하나의 메모리만 가지며 이것을 공유함 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> union smart // 공용체 { int A; short B; int C; char D; }; int main() { union smart obj; obj.A = 0x12345678; printf("%d \n",sizeof(union smart)); printf("A = %X \n",obj.A); printf("B = %X \n",obj.B); printf("C = %X \n",obj.C); printf("D = %X \n",obj.D); return 0; } | cs |
14번째줄 obj.A에 16진수 12345678의 값을 넣음
메모리에 아래와 같이 영역을 가지게 됨
출력:
4. 함수포인터
함수를 가르키는 포인터
하는일 : 1. 정의된 함수의 호출
2. 함수가 위치하고 있는 주소의 값 확인
선언 방법
1.void smart( ); -> 함수의 원형
2.void ( * ) ( ); -> 함수의 type
3.void ( * test ) ( ); -> test라는 함수의 포인터 변수 선언
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <stdio.h> //함수 타입 추출 //void smart1(); //함수의 원형 void smart1(void) { printf("1번함수\n"); return; } void smart2(void) { printf("2번함수\n"); return; } int main() { void (*test)(); // 함수포인터선언 test = smart1; //주소 지정 test(); //호출 test = smart2; // 2번째 주소지정 test(); return 0; } | cs |
18번째줄 : 함수포인터 명을 지정
20번째 및 23번째줄 : 포인터명은 같으나 서로 다른 함수 호출
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160309_오아람_업무일지_그 밖에 기초학습 (2) | 2016.03.09 |
---|---|
MIT 양자컴퓨터…암호화 종말? (0) | 2016.03.09 |
20160308_김가연_제어언어 그밖의 기초학습 (2) | 2016.03.09 |
20160308 _정일모 그 밖의 기초학습 (2) | 2016.03.09 |
20160308-이보원 제어언어(그 밖의 기초 학습) (3) | 2016.03.09 |
20160308_조재찬_업무일지_그 밖의 기초 학습 (3) | 2016.03.08 |
2016.03.08 업무일지 노태경 (0) | 2016.03.08 |
20160308_노유찬_그 밖의 기초학습 (6) | 2016.03.08 |