프로그래밍 언어/C언어 37

C언어 예시를 통해서 함수포인터 알아보기

안녕하세요. 오늘은 C언어 함수포인터를 알아보겠습니다 함수포인터란 포인터를 만들어서 함수에게 사용하는것 입니다 예시1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include char func(int i, int j , char c) { return i+j+c; } int main() { char (*p)(int,int,char); // 반환형 (*변수명)[전달인자]; p = func; printf("%d \n",func(1,2,3)); printf("%d \n",p(1,2,3)); } Colored by Color Scripter cs 결과값 6 6 ─────────────────────────────────────────────────────────────────────..

예시로 알아보는 volatile 한정자

안녕하세요. 오늘은 C언어를 사용하여 volatile 한정자를 알아보겠습니다. volatile를 알아보기 전에 최적화를 알아야 합니다. 컴파일을 할 때 최적화(Optimization)이라는 기능이 있습니다. 최적화 기능을 사용하면 의미 없는 코드를 기계어로 변환할 때 코드를 무시해버리기도 해서 속도 향상이나 크기 줄이기가 가능합니다. 이런 식으로 컴파일러마다 최적화 옵션이 다 있습니다. 예를 들어서 최적화 기능을 켜고 아래의 코드를 글로 컴파일 해보겠습니다. 1 2 3 4 5 int i = 0; i=1; i=2; i=3; i=4; cs 2~4번 무시하고 i=4만 실행한다고 생각하면 됩니다 (만약 뒤의 코드에서 i를 사용하지 않으면 아무것도 안합니다) volatile는 변수 앞에 쓰고 최적화를 하지 말라는..

C언어 Storage Class, Auto, Register, Extern, Static이란?

안녕하세요 오늘은 C언어 Storage Class, Auto, Register, Extern, Static에 대해 알아보겠습니다. Storage Class : 기억 영역을 분류하기 위해서 사용되는 용어입니다. 이때 Class는 객체의 Class랑은 상관이 없고 그냥 Class입니다 Auto : 지역변수에서 저장되는 공간입니다. 일반적으로 지역변수들은 Auto를 생략한거라고 봐도 됩니다. Auto의 범위는 특정 블럭입니다. 1 2 3 4 5 6 int calc(void) { int a=1; auto int b=2; return a+b; } cs a와 b의 선언은 같습니다. 또한 a,b의 생명은 2~6줄에만 있습니다. Register : 변수를 빠르게 접근하기 위해 RAM 대신에 CPU 레지스터에 로컬 변수..

C언어로 지수구하기

안녕하세요 오늘은 지수를 구하는 코드를 작성해보겠습니다 . 거듭제곱: 같은 수를 여러 번 곱한 것 밑 : 거듭제곱에서 곱한 수 (a) 지수 : 거듭제곱에서 밑이 곱해진 횟수 (n) aⁿ 작성할 코드는 아래와 같은 형태인 자연수의 지수를 구할 수 있는 코드입니다 9 -> 3의 2승 16 -> 2의 4승 빨강색의 값이 구할 값 입니다 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 unsigned char get_index(unsigned char num,unsigned char under) { char i=0; while(1) { if(num==1) return i; i++; i..

포인터 활용하기

안녕하세요. 오늘은 포인터의 활용에 대해 알아보겠습니다. 1. 데이터 변환 *포인터 미사용 int형(32비트) 변수에 어떤 값이 있고 이 값을 8비트씩(char형) 쪼개서 저장하는 코드입니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include int main() { int i_A=0b00000100000000110000001000000001;//32비트,00000100 00000011 00000010 00000001 char c_B[4];//8비트 c_B[0] = (i_A>>0) & 0b11111111; c_B[1] = (i_A>>8) & 0b11111111; c_B[2] = (i_A>>16) & 0b11111111; c_B[3] = (i_A>>24) & 0b111..

C언어 문자열 검색하기

안녕하세요. 오늘은 C언어 문자열 검색하기를 해보겠습니다. 알아야하는함수 strstr(비교할 문자열, 검색할 문자열); (string.h에 포함되어 있습니다) char *strstr(char * const _String, char const * const _SubString); 문자열을 찾았으면 문자열로 시작하는 문자열의 포인터를 반환, 문자열이 없으면 NULL을 반환 #include #include #include int main() { int i; char array[3][10]; char input[10]; strcpy(array[0],"ABC"); strcpy(array[1],"ABD"); strcpy(array[2],"IJK"); printf("값 확인\n"); printf("%s\n",arra..

동적메모리할당 2편

안녕하세요 동적메모리할당 관련 내용입니다 동적메모리를 할당한다는 것은, "스택"영역에 데이터를 저장하는것을 의미합니다 이처럼 동적할당을 한다면 프로그램 실행중에 변수를 메모리에 할당할수있게 됩니다 -동적메모리할당함수 void* malloc(size_t size); void* -> 반환형 malloc -> 함수이름 size_t -> 자료형 size ->변수명 1 2 3 4 5 6 7 8 9 10 11 #include #include #include int main() { char *p = (char*)malloc(10); strcpy(p,"wowon"); printf("%s \n",p); free(p); } cs 스택에 p가 저장되고 힙에 wowon가 저장되고 p가 wowon을 가리키게됩니다 8번째줄에 w..

동적메모리할당 1편

안녕하세요 오늘은 C언어 동적메모리할당에 대해 알아보겠습니다 동적메모리할당 알아보기전에 하기전에 알아야하는 개념이 있습니다 *메모리구조에 데이터영역-> 전역변수 , static변수 힙영역 -> 동적할당 스택영역 -> 지역변수 저장 wowon.tistory.com/164 *타임 컴파일타임 : 코드를 2진수로 변환시킬때 문법적인 에러를 검사하는 시간 런타임 : 프로그램을 실행시키는동안 검사하는 시간 *동적할당 사용 예시 숫자를 여러개 저장시킬려고 저장시킬려고 배열을 선언했습니다. int i[10000] (스택영역) 이때 배열i에 숫자를 100개 저장시키면 나머지 9900개가 빈 공간이라 낭비입니다 이럴때 동적할당을 사용해서, 숫자를 저장시킬때만 데이터를 할당합니다 (힙영역)

C언어 가변인자란?

안녕하세요 오늘은 가변인자에 대해 알아보겠습니다 가변인자란 인자의 개수가 변하는 것 입니다. 예를들어 정수2개를 입력받아서 그 합을 구하는 함수와, 정수3개를 입력받아서 그 합을 구하는 함수를 만들려면 함수 2개를 만들어야합니다 정수2개를 합하는 함수 int sum2(int a, int b) { return a+b; } 정수3개를 합하는 함수 int sum3(int a, int b, int c) { return a+b+c; } 그러나 가변인자를 사용하면 함수를 1개만 만들어도 됩니다. *가변인자 사용방법 1. 헤더파일포함시키기 2. 가변함수만들기 1. 헤더파일포함시키기 가변인자를 사용하려고하면 몇가지 매크로와 자료형을 사용하기위해서 헤더파일을 포함시켜야합니다 #include 2. 가변함수만들기 int s..

C언어 a,'a',"a' 차이점(변수,문자,문자열)

안녕하세요 오늘은 C언어 a,'a',"a"차이점에 대해 알아보겠습니다 가 : aa는 변수이고 a에 다양한 값을 넣을 수 있습니다. 나: 'a''a'는 문자상수입니다. 시스템 내부적으로 'a'는 아스키수치로 변환됩니다 다: "a""a"는 문자열이므로 a뒤에 널 문자가 있습니다. Colored By Color Scripter™1234567891011121314151617#include int main(void) { char test; char *testp; test = 'a'; test = "a"; testp = 'a'; testp = "a"; } 10번째줄 : 'a'는 아스키코드 정수값이므로 test에 들어갈 수 있습니다 11번째줄 : "a"는 문자열이고 "a"의 리턴값은 주소이므로 test에 들어갈 수 ..