C언어 10

call by value vs call by reference

안녕하세요 오늘은 call by value vs call by reference 에 대해 알아보겠습니다구글이나 네이버에 call by value vs call by reference를 검색하면 수천개의 글들이 나옵니다그 만큼 중요한 내용입니다 call by value와 call by reference를 굳이 비교하는 이유는 함수를 작성할때 중요합니다 어떤 함수를 호출할때 매개변수로 int형 변수를 넘긴다고하고, +1를 한다고 해봅시다 Colored By Color Scripter™1234567891011121314#include int upupup(int a){ a+=1;} int main(void) { int value = 0; upupup(value); printf("value : %d ",value..

C언어 배열의 변수명에 &를 붙이면?

안녕하세요 오늘은 C언어 배열에 대해 알아보겠습니다 배열선언이 하나 있습니다int test[1]={1}; test의 값은 0x00이고 test의 주소값(&test)도 0x00이고 test[0]의 주소값도 0x00입니다그러나 두개는 같고 한개는 의미하는 바가 다릅니다 Colored By Color Scripter™123456789101112#include int main(){ int test[1]={1}; printf("%d \n" , test) ; printf("%d \n" , &test) ; printf("%d \n" , &test[0]) ;} 출력창에는 3가지 값이 같게 나와있습니다. 출력한3개는 일단 주소값이니까 *를 붙이면 1이 나와야합니다Colored By Color Scripter™123456..

C언어로 상승엣지,하강엣지 기능 구현하기

안녕하세요 오늘은 C언어로 상승엣지,하강엣지 기능을 구현해보겠습니다. 그리고 C언어뿐만아니라 다른 개발환경에도 적용 할 수 있습니다 ------상승엣지------ 상승엣지란 어떤 값이 0에서 1로 변할때를 의미합니다. 위의 그림에서 빨강동그라미의 시점을 알려주는 겁니다 사용예시) 어떤 버튼을 1번 누르면 값이 1 증가하는 기능 int main() { int btn; int num; while(1) { if(btn == 1) { num++; } } } 위의 코드에서 btn변수가 버튼을 눌렸을때 변하는 변수라고 가정하고 (버튼이 안눌리면0, 버튼이 눌리면1) 유저는 버튼을 누릅니다. btn이 1이겠죠 버튼을 누르고있는 시간에따라 num이 계속 증가하게 됩니다 원래 하려고했던 버튼을 1번누르면 값이 1증가하는..

함수 선언할 때 매개변수에 *넣는거와 안넣는거 차이점.

안녕하세요 오늘은 C언어에서 사용자함수를 정의 할 때 매개변수에 *를 넣을때와 안넣을 때 차이점을 알아보겠습니다 Colored By Color Scripter™123456789101112131415161718192021222324#include int noChange(int i){ i=100*i; return i;} int change(int *i){ *i=200*(*i); return *i;}int main(){ int a= 1; int b= 1; printf("noChange 함수 호출 리턴 값 : %d \n", noChange(a)); printf("change 함수 호출 리턴 값 : %d \n", change(&b)); printf("int형 변수 a 값 : %d \n", a); printf("i..

C언어의 메모리 구조

안녕하세요 오늘은 C언어 메모리구조에 대해 알아보겠습니다 프로그램을 실행하게되면 전역변수의 매개변수등은 정해진 장소에 저장되게 됩니다 1. 코드영역실행할 프로그램의 코드가 저장되는 메모리 영역cpu는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행합니다. 2. 데이터영역프로그램이 시작과 동시에 할당되어, 종료 시까지 남아있는 특징의 변수가 저장되는 영역ex)전역변수, static변수 3. 힙 영역프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기 위한 영역 4. 스택영역함수를 빠져나가면 소멸되는 변수를 저장하는 영역지역변수,매개변수 * 장점유사한 성향의 데이터를 묶음.관리가 용이해지고, 메모리의 접근이 빨라짐. 예) Colored By Color Scripter™12345678#include..

C언어 역슬래시(\)란?

안녕하세요. 오늘은 C언어 역슬래시에 대해 알아보겠습니다 (\) 역슬래시는 \n, \b 같은걸로도 쓰이고 그냥 역슬래시 \ 로도 쓰입니다. 그냥 역슬래시만 쓴다면 줄을 이어주는 역할을 합니다. 아래코드의 결과는? Colored By Color Scripter™123456789#include int main(){ printf("역슬래시 \ 태스트 \ \n"); } 이런식으로 사용합니다. 그래서 코드를 작성하는데 한줄을 길게 작성해야될 때 사용하면 됩니다예를들어 if문 조건이 긴 경우, define으로 매크로함수를 사용 할 때 사용합니다. 예) define 매크로함수 사용 Colored By Color Scripter™1234567891011#include #define add(ia,ib) \{\ print..

포인터 사용 예시

안녕하세요 오늘은 포인터사용 예시를 들어보겠습니다 Colored By Color Scripter™12345678910111213141516171819#include int main(){ int a=100; int b = 69; int *p; p= &a; printf("a의주소 : %d \n", &a); printf("p의주소 : %d \n", p); *p = b; printf("%d \n",a); printf("p의주소 : %d \n", p);} a의주소 : 6487612p의주소 : 648761269p의주소 : 6487612 먼저 int형 포인터를 만듭니다. int형 포인터변수에는 어떤 변수의 주소값을 넣을수 있습니다.9번째 줄에서 만들었던 포인터 변수에 a의 주소를 넣습니다.a의 주소 : 6487612..

C언어 포인터와 배열에대해 알아보기입니다.

안녕하세요. 오늘은 배열과 포인터의 관계에 대해 알아보겠습니다.배열과 포인터는 밀접한 관련이 있습니다. 왜냐하면 배열의 이름 = 주소입니다. 배열의 이름 = 배열의 첫번째 주소 위의 그림을보면 int형 배열을 선언했습니다. array1[0]의 주소는 1이고 int형이므로 주소가 4씩 증가하게 됩니다.이때 array1 = &array1[0] = &array1이 됩니다.array1 = 배열의 이름이 배열의 첫번째 주소&array1[0] = 배열의 첫번째 주소&array1 = array1배열의 주소 그러나 배열의 크기는 다릅니다. array1의 크기는 20이고 array1은 int형이므로 4입니다.그러므로 array1+1 = 5 , &array1[0]+1 = 5, &array1+1 = 21이 됩니다. 1234..

C언어 포인터 알아보기 입니다.

안녕하세요. 오늘은 포인터(pointer)에 대해 알아보겠습니다. 변수 선언을 하면 메모리에 어떠한 값이 저장됩니다. 그러면 이때 이 메모리의 주소가 있고 그 주소를 가리키는게 포인터라고합니다. - 주솟값의 실제 사용 예위의 그림은 32bit MCU의 메모리맵입니다. 왼쪽 0x로 시작하는 부분은 주소이고 오른쪽은 그 주소에 저장된 데이터입니다. PortA를 제어하려면 0x40010c00주소와 offset을 더해서 제어하면 됩니다. 1 (*(volatile unsigned *)0x40010c04) |= 0x10;cs (의미는 아래에 나옵니다.) 위의 코드는 실제로 주솟값을 가지고 코딩한 것입니다. 근데 주솟값을 가지고 코딩을 하면 사용 할 때마다 찾아야 하므로 힘듭니다. 그래서 일반적인 컴파일러는 이러한 ..

C언어 구조체 사용하기.

안녕하세요. 이번에는 구조체를 사용해보겠습니다.구조체란 여러 가지 데이터를 쉽게 저장하기 위해서 사용하는 것입니다. 선언방법 strcut 변수명{멤버 목록}; 예) 123456struct user{ int HP; int MP; char job;};csuser라는 변수를통해서 3가지 데이터에 접근 할 수 있습니다. 123456789101112131415161718192021#include int main(){ struct user { int HP; int MP; char class; }; struct user user1; user1.HP = 100; user1.MP = 50; user1.class = 'a'; printf("user1의 HP : %d \n",user1.HP); printf("user1의 M..