목록분류 전체보기 (96)
노는게 제일 좋습니다.
참고자료 http://soen.kr/ 그 어느때보다 혼돈의 카오스가 가득한 공부였다...주변에 실력자들이 많아서 감사하게도 편하게 공부한다. 1. 부분배열(subArray)int a[2][5]; 라고 한다면 보통 다차원 배열이라고 부르지만 c에는 다차원배열이 존재하지 않고 오직 일차원배열만이 존재한다.즉, a[2][5]배열은 이차원배열이 아니며 a[0], a[1] 이라는 부분배열을 가진다. a[0]는 그저 a의 원소가 아니라, 하나의 완전한 배열인 것이다.a[0]이라는 배열은 a[0][0]~a[0][4]라는 원소를 가질 것이다. 2. 포인터 배열원소가 포인터형인 배열.예 : char *a[5]={"java","python","perl","ruby","cpp"};만약 위와같이 정의를 해두면, "java"가..
참고자료 http://soen.kr/ 1. 동적 할당, 할당 해제malloc과 calloc은 인수에 넣은 만큼의 공간을 할당하는 함수. free는 메모리를 풀어주는 함수. stdlib.h에 있다.void *malloc(size_t size );void *calloc( size_t num, size_t size );void free(void *memblock );예int *ar; ar = malloc(10 * sizeof(int)); printf("%p",ar); free(ar); printf("\n%p", ar); 2. 재할당 void *realloc( void *memblock, size_t size ); 첫 번째 인수로 할당된 메모리의 번지를 주고, 두 번째 인수로 재할당 크기를 준다.첫 번째 인수가..
참고 자료 http://soen.kr/ 1. void형 포인터대상체의 타입을 정하지 않은 포인터. 어떤 대상체든 가리킬 수 있다.하지만, 타입을 모르기 때문에 값을 읽을 수 없고, 증감 가감도 안된다. 2. void형 포인터의 대입void포인터에 다른 일반적인 포인터를 대입하는건 가능하다.하지만 반대는 안된다. void를 예쁘게 캐스팅한 다음 대입해야한다.-예 : pi=(int *)pv; 3. NULL포인터대게 포인터값 NULL은 0값을 가지도록 매크로 상수로 정의되어있다.포인터가 NULL값을 가지면 쓸모없는 것, 무효적인 것이 된다. 에러일 때 주로 NULL을 리턴해준다.그래서 if(pi==NULL) 과 같이 유효성을 검사한다.
참고 자료 http://soen.kr/ 1. *기호의 사용a=3*4; 에서의 *는 곱하기 기호이다.printf("%d",. *pi); 에서의 *는 포인터 연산자이다. 포인터 변수가 가리키는 주소에 기록된 데이터를 읽어온다.int *pi; 에서의 *는 포인터를 선언할 때 사용하는 punctuator이다. 2. 포인터의 타입포인터는 주소를 값으로 가지지만 int, char와 같은 타입을 요구한다. 그 이유는 다음과 같다.- 해당 주소로부터 시작하여 몇 비트나 읽을지, 어떤 방법으로 해석할지 알기 위해.- 다음 대상체(변수)로 이동할 때 얼마나 이동해야 할지 알기 위해 3. 포인터의 증감연산pi라는 포인터에 pi++ 와 같이 증감연산을 수행하면, 단순히 그 값을 1늘리지 않는다.현재 가리키는 대상체 뒤에 따라..
참고 자료 http://soen.kr/ 1. 정의동일한 타입을 가지는 변수들의 집합int a[5];와 같이 선언하며, 이 경우 int형 변수 다섯 개를 메모리상에 연속적으로 만든다.배열에 들어있는 각각의 변수들을 요소(엘리먼트)라고 한다. a[0]부터 시작한다.배열 선언시 크기는 상수로 줘야한다. 변수 몇 개를 만들어야될지 알아야되니까..* 언어는 배열의 범위를 체크해주지 않는다. int a[5]로 선언해놓고 실수로 a[5]를 참조해도 값이 읽히긴 읽힌다.그게 내가 원하는게 아니라서 그렇지.. (쓰레기값) 2. 다차원배열int a[5][2];와 같이 만든다. 3. 배열 시작지점 포인터int num[5]; 과 같이 배열이 만들어졌다고 하자.이 때, num 이 갖는 값은 배열num이 시작되는 지점의 주소이다..
참고 자료 http://soen.kr/ 1. 삼각 함수모두 double형 하나를 인수로 받는다. (라디안)sin, cos, tan, asin, acos, atan, sinh, conh, tanh 2. 지수 함수모든 인수는 double형이다.sqrt(x) : x의 제곱근 pow(x,y) : x^y(x의 y제곱)log(x) : 자연로그. 고교 과정 기준 ln(x)와 같음.log10(x) : 상용로그. 고교 과정 기준 log(x)와 같음.exp(x) : 자연지수함수. e^xhypot(x,y) : 직각삼각형 빗변 길이. x,y는 나머지 두 변 길이 3. 정수화 함수floor(x) : x보다 크지 않은 최대 정수ceil(x) : x보다 작지 않은 최소 정수** 반올림 : floor(x+0.5)** 소수점 둘 째 ..
1. 기억 부류의 종류 : 전역, 지역, 정적, 레지스터 2. 지역변수와 전역변수의 차이 정적 데이터 영역 : 프로그램 코드 다음에 위치하는 한 부분. 프로그램 실행 시 메모리에 로드되어 계속 유지.지역 변수의 장점 : 함수의 독립성 높임, 메모리 절약, 디버깅 효율 향상, 특별한 기법 사용(재귀 호출, 상호 호출)* 지역 변수를 자동 변수(Automatic Variable)라고도 부른다. 자동으로 생성되어 자동으로 파괴되기 때문.* 지역 변수의 통용 범위는 정확히 말하면 { } 블럭 내부이다. 블럭 바깥에서는 못쓴다.* 지역 변수가 파괴되는 시점은 컴파일러마다 다르다. 보통은 for문에서 만든 변수는 루프가 끝나면 파괴된다. * 함수 내에서는 같은이름의 전역 변수, 지역 변수가 있다면. 지역 변수를 우..
1. 값 호출 방식void main() { int i, j; i = 5; j = sqrNum(i); printf("i=%d, 결과=%d\n", i, j); }int sqrNum(int a) { a = a*a; return a; }sqrNum에서 아무리 a를 바꿔도 i값은 바뀌지 않는다.이 경우 main함수에서 sqrNum(i);라는 구문을 통해 값 5를 sqrNum함수에 전달했다.변수 i의 주소를 전달한 것이 아니다.다시 말하면 sqrNum내의 형식매개변수 a에 i값을 대입한다는 것은, 새로운 변수 a를 선언해 단순한 값 5를 할당한 것이다. 2. 참조 호출 방식void main() { int i, j; i = 5; j = sqrNum(&i); printf("i=%d, 결과=%d\n", i, j); } ..