C언어 35

[C언어] 함수포인터

1. 선언 및 사용 1) 선언 return type ( * function name ) ( variable type1, variable type2, ... ); ex) double (*fun) (double,double); > fun이라는 이름을 가지고, double변수를 두 개를 가질 수 있는 함수 포인터 2) 사용 function pointer = function; ex) #include int puls(int x, int y) { return x+y; } int (*fun)(int x, int y); main() { fun = plus; printf("%d\n",fun(2,3)); } 2. void type변수 다루기 1) 변수 타입을 변경하여 다루기 #include int igreater(void..

[C언어]동적할당 ( malloc, realloc, calloc)

1. 메모리할당 우리가 흔히쓰는 선언은 정적 선언이라고 합니다. 즉, 메모리의 총량이 정해져 있다는 것입니다. 정적 선언으로 인해 지정된 변수는 Stack 이라는 메모리공간에 저장됩니다. ※ 참고 : 블럭이 시작 될 때도 stack 에 메모리를 할당합니다. 이를 전문용어로 Activation Recorde라고 합니다. 이에 비해 아래에 나올 동적 선언으로 인해 지정된 변수는 Heap 이라는 메모리에 저장됩니다. 그럼 이젠 동적 할당을 알아봅시다. 2. 동적 할당 동적 할당은 말 그대로 용량이 정해져 있지 않고 변화하는 것을 이야기 합니다. 동적 할당은 다음의 경우에 사용합니다. 1) 필요한 크기를 미리 알수 없는 경우 2) 실제로 필요성 여부를 모르는 메모리를 부여할 때 3) stack size에 한계가..

[C언어]기억클래스류 /static extern auto register

1. 기억 클래스류 1) 변수가 어떤 형태의 메모리에 할당될지 결정하는 것 2) 문법 [기억클래스류] 자료형 변수명 (=초기값); 3) 기억클래스류를 지정하는 이유 ⓐ 변수를 사용할 수 있는 통용범위를 결정 ⓑ 기억장소의 생성과 소멸시기의 차이를 발생시켜 변수의 유효기간을 달리할 수 있다. 4) 종류 auto, register, static, extern 2. 지역변수 1) 유효기간 : 함수나 블록이 실행할 때 변수가 생성 함수나 블록이 끝나면 변수가 소멸 2) 초기 값을 부여하지 않으면 쓰레기 값을 가진다. 3. 전역변수 1) 함수 밖에 선언되는 변수 2) 범위 : 선언 된 부분의 아래쪽에 위치한 모든 함수 프로그램이 실행될 때 변수가 생성되고, 프로그램이 종료될 때 변수가 소멸된다. 3) 특징 : 전..

[C언어]포인터 pointer <기본>

1. 데이터를 전달하는 방식 1) 값 전달 방식 : 함수의 일반적인 값 전달 방식. 함수의 안정성과 독립성을 제공 2) 주소 전달 방식 : ⓐ 함수를 호출한 후 실 매개 변수의 값이 변경되도록 하기위한 경우 ⓑ 함수의 결과 값을 두 개 이상 되돌리기 위한 경우 ⓒ 함수의 매개 변수가 배열인 경우 2. 포인터 1) 주소값, 어드레스 라고도 불린다. > 메모리상의 특정 위치 값을 의미한다. 2) 포인터 연산자 "&" > 변수가 할당 되 있는 주소값이 출력된다. ex ) #include void main() { int a; a = 10; printf("a = %2d\ta의 주소 = %x\n",a,&a); } 결과 : a = 10 a의 주소 = 12ff7c (%x는 16진수를 출력할때 사용하는 것) 3) 포인터..

[C언어] 선행처리자 Preprocessor

1. 선행처리자의 역활 1) 단순한 문자열의 치환 2) 다른 파일의 내용을 첨가 3) 컴파일러에게 컴파일 조건 부여 4) 컴파일러에게 정보를 제공 2. 매크로 상수 1) 문법 #define 매크로상수 치환할 문자열 2) 주의점 ⓐ 선행처리자 명령 뒤엔 ; 세미콜론을 붙여주지 않는다. ⓑ 두 행에 걸쳐서 선행처리자가 명령을 기술 할 때에는 행의 끝에 '\'가 있어야 한다. 3. 매크로 함수 1) 문법 #define 매크로함수 함수내용 2) 주의점 단순 치환 때문에 발생할 수 있는 부작용에 주의 > 괄호를 잘 이용해준다. 4. #include 1) #include 표준디렉토리에서 해당 해더파일을 찾는다. 2) #include"headername" 현재디렉토리에서 해당 해더파일을 찾는다. 해더파일 > 확장자 ..

[C언어] 재귀 호출 함수 Recursion 팩토리얼 구연(재귀 함수이용)

1. 재귀 함수의 장단점 1) 재귀 함수는 불려진 만큼 메모리를 할당받는다(소비한다). 2) 재귀 함수는 함수가 종료되지 않은채 계속 함수를 호출한다. > 함수 내에 선포된 자동 변수들이 램에 새롭게 할당을 받는다. 3) 재귀 함수는 메모리를 많이 소비하여 처리속도가 느리다. 2. 재귀 함수의 예시 펙토리얼(!) 팩토리얼 n! = n*(n-1)! #include // Claculate factorial function long factorial(int x) { if ( x == 1 ) return 1; else return x*factorial(x-1); } int main() { int n; int c = 1; printf(" input number : "); c = scanf("%d",&n); whi..

[C언어소스]구조체.배열 이용. 성적 관리

#include #define stu_MAX 2 //학생수를 필요에 따라 변경해주세요. #define sub_MAX 2 //과목수를 필요에 따라 변경해주세요. struct grade { int hacban[8]; char name[20]; int sub[3]; int tot; float avg; }; main() { int i, j; int sum; float avg; struct grade str[stu_MAX]; for ( i = 0 ; i < stu_MAX ; i++ ) { sum = 0; printf("학번을 입력해주세요 : "); scanf("%s",&str[i].hacban); printf("이름을 입력해주세요 : "); scanf("%s",&str[i].name); for ( j = 0 ; ..

[C언어] 구조체 structure 2번째

1. 구조체의 변수의 초기화 구조체의 변수를 초기화 하려면 구조체 변수를 선언할 때 각 멤버에 대응하는 초기값을 { }안에 나열한다. ex) struct time { int hour; int min; int sec; } ; struct time first = { 11, 3, 10 } > hour = 11, min = 3, sec = 10 이 들어간다. 2. 구조체 간의 복사 동일한 구조체 형으로 선언된 구조체 변수는 구조체 단위로 모든 멤버들의 값을 복사할 수 있다. 구조체 변수 단위로 대입연산자('=')를 사용하면 멤버들이 1:1로 대응되어 값들이 한꺼번에 옮겨진다. ex) struct time { int hour; int min; int sec; } ; struct time first = {11,3,..