임베디드 개발(before)/IoT 임베디드 SW 개발자 양성과정

[6일차] C언어 교육6-(새롭게 진도 나감. ~포인터, 배열)

주운녕 2020. 7. 20. 22:52

교육 2주 차가 시작됐다.

오늘부터 일주일간 새로운 강사님에게 임베디드 C 프로그래밍 수업을 배우는 날이다.

임베디드 C 프로그래밍이지만 그냥 C언어다.

C언어 진도를 다시 처음부터 나갔다.

 

1. @head 부분 : 함수에 사용될 각종 변수와 배열등을 선언한 부분, 

2. @body 부분 : 선언된 각종 변수와 배열등이 사용되어 코드가 진행되는 부분.

(과거 C 버전에서는 body부분에서 변수 정의를 할 수 없었지만 최근 버전에는 가능해졌다. but 그로 인해 포인터에서 문제가 발생하는 경우가 있다.)

3. 변수 a=10; 

 왼쪽 부분 : Lvalue     =     오른쪽 부분 : Rvalue

4. int = double -> loss 발생.

5.

char str1[] = "hello"; //포인터 상수 ->  stack에 존재.
char *str2[] = "world"; //포인터 변수 -> 문자열은 .text에 명령어로 존재

str2 = "hello"; // 가능할까? 가능하다. hello는 문자열의 주소이기 때문에. (포인터는 주소를 담는 변수.)
str1 = "world"; // 불가. str1은 포인터 '상수' 이기 때문에  상수에 상수는 넣을 수 없다.
//but strcpy(str1, "world");로 넣을 순 있다.

**문자열은 .text에 명령어로 존재 : ex)' h문자를 ~~에 두세요.' 같은 명령어

 

6. datatype 인지 판별법 : 캐스트(형변환 연산자)로 쓸 수 있으면 datatype이고 아니면 상수 같은 거.

7. a + b // + 같은 것을 operator라고 하고 a, b 같은 것을 operand 라고 한다.

8. ++연산자의 원리. => 3*i++; 의 경우 ++가 i를 가져가, 복사본을 떠서 리턴하고 원본은 따로 ++한다.

9. { } : braces 브레이스 -> 함수 내용(instruction)

( ) : parenthesis 페어랜시스 -> 함수(포인터 상수)

[ ] : bracket 브라켓 -> 배열 만듦(포인터 상수)

< > : square 

10. 배열 a[4] = {10} // 나머지 a[1], a[2], a[3]을 0으로 초기화한다.

11. 컴퓨터 구조

 

12. 포인터, 배열, 참조 연산자와 사이즈에 관한 설명을 해주시면서 강사님께서 좌파 우파 란 형식을 들어 설명해주었다. 기존에 알고 있던 사실을 이해하는데 도움이 되기보다는 새로운 형식으로 새롭게 이해하기가 더 어려웠다.

13. &arr 은 배열 전체 주소

14. C언어의 개념이 불안정한 부분.