일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Edge Detector
- java
- pwm
- vivado
- hc-sr04
- FND
- prescaling
- half adder
- Pspice
- Recursion
- LED
- ring counter
- D Flip Flop
- verilog
- soc 설계
- behavioral modeling
- ATMEGA128A
- uart 통신
- Algorithm
- atmega 128a
- structural modeling
- BASYS3
- DHT11
- Linked List
- dataflow modeling
- KEYPAD
- test bench
- gpio
- stop watch
- i2c 통신
- Today
- Total
목록C (10)
거북이처럼 천천히

1. 서로 다른 자료형으로 연산하게 되면 메모리의 크기가 큰 자료형을 따라 결과값이 나오게 된다. 문제) 아래와 같이 서로 다른 자료형인 int와 double을 가지고 연산하게 된다면 연산한 결과는 어떤 자료형을 갖게 되는가? int a = 20;double b = 5.5;// a / b == 연산 결과 : double형으로 출력 정답) int형은 4 byte, double형은 8 byte이고, 8 byte가 4 byte보다 크기 때문에 a / b의 연산 결과는 double 형을 갖는다. 이는 '자동 형 변환'에 의해 발생된다. 자동 형 변환에 의해 int / double을 연산이 이루어지면 int형을 double형으로 자동적으로 형 변환이 발생하여 double / double 형태로 연산을 하여 출력..
1. 공용체는 무엇인가?공용체의 선언 방식은 구조체와 동일하나, 구조체는 메모리상에 모든 맴버들을 저장하기 위한 공간을 마련하지만, 공용체인 경우에는 모든 맴버들이 하나의 저장 공간을 공유하며, 사용한다.공용체의 기본 형태는 다음과 같다.// 공용체 선언union student { int stduent_id; double grade; }; 2. 모든 맴버들이 하나의 저장 공간을 공유한다면, 동시에 여러 맴버들을 저장할 수 있는가?공용체에서는 맴버들이 하나의 저장 공간을 공유하면 저장하기 때문에 동시에 여러 맴버들의 데이터들을 저장할 수 없다.따라서 하나의 맴버 값이 저장 공간에 저장되어 있는 상태에서 다른 맴버값이 저장된다면 기존의 맴버 데이터 값에다가 덮어씌우기 형태로 저장된다.따라서 모..

1. Padding byte시스템은 데이터를 빠르게 읽고, 쓰기 위해서 메모리 공간을 일정한 크기 단위로 접근한다.하지만, 구조체는 여러 종류의 자료형을 포함하기 때문에 일정한 크기 단위로 접근하여 데이터를 읽고, 쓰기 힘들다.이로 인해 구조체의 맴버를 빠르게 읽고, 쓰기 힘들다.따라서 구조체의 맴버를 일정한 크기 단위로 빠르게 읽고, 쓰기 위해 (= 일정한 크기 단위로 접근하기 쉽게 만들기 위해) 맴버들 사이에 Padding byte를 넣어준다. 2. Byte alignment구조체의 맴버를 읽고, 쓰는 과정에서 빠르게 수행하기 위해 메모리에서 일정한 크기를 갖고 접근하는데, 이 일정한 크기대로 읽기 편하게 구조체 맴버 간에 Padding byte를 넣는 과정을 Byte alignment라 한다. ..
1. 함수 포인터는 무엇인가?이름에서도 알 수 있듯이 일반 변수 포인터 처럼 함수의 주소를 저장하고, 이를 참조 및 활용할 수 있는 포인터이다.따라서 함수 포인터를 통해 해당 함수를 호출하여 사용할 수 있다. 2. 함수 포인터는 왜 존재하고, 필요하는가?함수 포인터는 주로 다음과 같은 상황에서 주로 사용된다.함수 포인터를 사용하여 코드 간결화여러 사람들과 함께 하나의 대상을 가지고 공동 작업을 수행할 경우callback 구조를 만들기 위해서 3. 함수 포인터 생성 방법함수 포인터를 생성하는 방법은 아래 영상을 참고했다. 일반적으로 함수의 형태는 다음과 같은 구조를 갖는다.ex) int test (int ); → argument의 자료형이 int형이고, return의 자료형이 int형인 tes..

1. 배열 요소의 주소와 배열의 주소Q) 배열명은 "배열의 첫 번째 원소의 주소 값"을 의미하고 있음을 알고 있다. 그럼 &배열명 은 무엇을 의미하는가?#include int main(void) { int list[] = { 1, 2, 3, 4, 5 }; printf("list = %u\n", list); printf("&list = %u\n\n\n", &list); printf("list + 1 = %u\n", list + 1); printf("&list + 1 = %u\n", &list + 1); return 0;} 위 실행 결과를 통해 알 수 있듯이 배열명인 list와 배열명의 주소인 &list는 동일한 주소 값을 갖는다.하지만, 주소 덧셈 연산을 한 결과값은 전혀 다르다.▶ list + 1 = l..

1. 이중 포인터란 무엇인가?이중 포인터는 포인터의 주소 값을 변수의 값으로 갖고 있는 포인터 변수이다.일반 포인터가 가르키는 주소 값에는 일반 변수가 있지만, 이중 포인터가 가르키는 주소 값에는 또 다른 포인터가 있다.따라서 이중 포인터를 통해 일반 변수에 접근하기 위해서는 *(에스터리크)를 2번 사용하여 접근해야한다.// 일반 변수 data int data = 10;// 일반 포인터 변수, p_dataint *p_data = &data;// 이중 포인터 변수, p_p_dataint **p_p_data = &p_data;// 일반 포인터를 통해 일반 변수 접근printf("%d", *p_data); // 이중 포인터를 통해 일반 변수 접근printf("%d", **p_p_data); 2. 이중 포인..

1. 포인트 배열이란 무엇인가?같은 자료형을 갖는 포인트들을 모아 만든 배열포인트 선언과 포인트 배열 선언은 다음과 같다.// 포인트 선언int *p_data;// 포인트 배열 선언// int *형 포인트를 3개를 모아 만든 배열int *p_arry[3] 2. 포인트 배열의 사용 예시포인터 배열로 여러 개의 문자열을 저장 및 출력.#include int main(void) { char* p_string[5]; p_string[0] = "dog"; p_string[1] = "elephant"; p_string[2] = "horse"; p_string[3] = "tiger"; p_string[4] = "lion"; for (unsigned char i = 0; i p_string 배열명을 갖는 배열을 ..
1. 레지스터 변수란 무엇인가?Local variable와 Global variable은 주기억장치인 메모리 공간에 저장한다.Register variable은 CPU내에 있는 임시기억장치인 Register에 저장한다.따라서 이미 연산을 수행하는 ALU (Arithmatic Logic Unit)가 있는 CPU내에 있기 때문에 상대적으로 지역 변수와 전역 변수와 비교했을 때, 데이터를 옮겨지는 과정이 없기 때문에 연산 속도가 빠르다.따라서 자주 사용하는 데이터 및 변수에 대해서 레지스터 변수로 사용하는 것이 일반적이다. 2. 레지스터 변수 주의사항전역 변수를 레지스터 변수로 사용할 수 없다.▶ 전역 변수의 lifetime은 프로그램의 시작과 끝이기 때문에 한정적인 레지스터에 계속해서 데이터를 저장하기 어렵기..