C :: 랜덤을 사용하는법 c언어는 랜덤을 표현하기 위해 rand라는 함수를 사용한다. 허나 rand함수를 사용하기 위해서는 그 함수가 들어있는 헤더파일을 호출해야하는데 바로 stdlib.h 라고하는 표준라이브러리 헤더를 호출하면 사용할 수 있다. rand의 원형을 살펴보면 다음과 같다. int rand(void); 별거없어보인다. 아마도 rand()라고 쓰면 int형으로 랜덤값이 반환될것이다. 하지만 실제로 프로그램을 짜보면 같은 수가 나온다. 왜일까? 실제로 rand함수가 어떻게 생겼는지 보면 알 수 있다. rand함수 안에서 rand는 다른 여러 함수를 호출한다. 계속 함수속 함수들로 파고들어가면 랜덤값을 생성하는 식이 나온다. (seed) * 12345 + (어떤값) 위와비슷한 형식이다. seed값에 상수를 곱한 뒤에 특정.. Programing/C 2017. 4. 15. 18:42
C :: 배열포인터와 포인터배열 배열은 배열이고 포인터는 포인터인데..... 도대체 배열포인터와 포인터배열은 무엇일까? 우선 배열포인터란! 결국엔 포인터인 배열이다. 형태는 int (*ptr)[3] 과 같다. 포인터가 먼저 연산되기때문에 결국엔 포인터이다 위의 식을 풀어정리하면 아래처럼 3줄의 포인터가 있다고 생각할 수 있다. *ptr[0] --------------- *ptr[1] --------------- *ptr[2] --------------- 다음은 포인터배열이다. 이또한 결국엔 배열인 포인터이다. 형태는 int *ptr[3] 과 같다. 배열이 먼저 연산되기 때문에 결국엔 배열이다. 위의 식을 풀어 정리하면 아래처럼 3칸의 배열이 3개 이상 있다고 생각할 수 있다. ptr[0][0] ptr[0][1] ptr[0][2] ptr.. Programing/C 2017. 4. 15. 18:19
C :: scanf사용시 &(주소연산자)를 사용하는 이유 우리는 흔히 scanf함수를 사용할 때 변수앞에 주소연산자(&)를 붙인다. 왜일까? 그 이유를 알아보기 위해 먼저 scanf 함수의 원형부터 찾아보자 int scanf(const char *format, [address…]); 이것이 scanf 함수의 원형이다. int(정수)형으로 반환값을 받도록 되어있고, 인자로 char(문자)형 포인터인 포맷과 주소를 받고있다. 여기서 이 주소! address라는 말뜻처럼 두번째 인자로 주소값을 받는다. 왜? 바로 저번에 배웠던 call by reference 때문이다. scanf는 변수의 값을 변경시키기 위해서 주소값을 통해 변수 메모리에 접근한다. 그렇기 때문에 scanf함수를 사용할 때 주소연산자(&)를 통해 변수의 주소를 알려주어야 한다. Programing/C 2017. 4. 15. 18:00
어셈블리어 기본명령어 1. 점프(jmp) 프로그램의 흐름을 다른곳으로 이동시키는 명령jmp short 401000 와같은 형태로 사용 short는 넘어갈 주소와의 거리가 가까움을 뜻하며 거리가 멀면 long을 쓰면 된다. 2. 증가(inc) 값을 1만큼 증가시키는 명령inc eax 와 같은 형태로 사용 eax의 값을 1만큼 증가시킴 3. 감소(dec) 값을 1만큼 감소시키는 명령dec eax와 같은 형태로 사용 eax의 값을 1만큼 감소시킴 4. 덧셈(add) 피연산자를 더해서 왼쪽에 저장하는 명령add eax, 10 과 같은 형태로 사용 eax에 10을 더함 5. 뺄셈(sub) 피연산자를 빼서 왼쪽에 저장하는 명령sub eax, 10 과 같은 형태로 사용 eax에 10을 뺌 ...11) Study/reversing 2017. 4. 11. 02:25
리틀엔디안 빅엔디안 엔디안이란 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻함 이러한 엔디안은 3가지로 분류하고있다. 빅엔디안, 리틀엔디안, 미들엔디안 간단히 설명하자면 큰 단위가 앞에 나오는 빅 엔디안과 작은 단위가 앞에 나오는 리틀엔디언이 있는데 이 두 경우에 속하지 않거나 둘을 모두 지워너하는것을 미들엔디언이라고 한다. 조금 이해하기 쉽게 말하면 빅엔디안은 최상위 바이트부터 차례로 저장하는 방식이며, 리틀엔디안은 최하위 바이트부터 차례대로 저장하는 방식이다. 예를들어 10101100 이라는 2진수가 있다면 이를 빅엔디안형식으로 저장을 하면 10101100 이 되고 리틀엔디안 형식으로 저장을 하면 00110101 이렇게 반대로 뒤집어져 저장되는것을 알 수 있다. 이렇게 뒤집혔다고 값이.. Study/reversing 2017. 4. 11. 01:47
C :: 2차원배열 ㄹ정렬하기 이번에는 코딩과제만 주어졌다. 1. 달력 출력하기(2017년 기준) 2. 배열크기 N을 입력받아 N*N행렬을 만들고 오름차순으로 정렬하기 3. 위의 정렬을 역순으로 정렬하기 4. ㄹ 정렬하기 마지막 ㄹ정렬에 대한 코드는 아래와 같다. #include int i,j; void func_e(int arr1[][10],int size1){int tmp;int k,l,y;for(k=0;k Programing/C 2017. 4. 4. 02:57
C :: 2차원배열에서의 오름차순과 그 역순 이번에는 코딩과제만 주어졌다. 1. 달력 출력하기(2017년 기준) 2. 배열크기 N을 입력받아 N*N행렬을 만들고 오름차순으로 정렬하기 3. 위의 정렬을 역순으로 정렬하기 4. ㄹ 정렬하기 내가 작성한 2번과제에 대한 코드는 아래와 같다 #include int i,j; void func_e(int arr1[][10],int size1){int tmp;int k,l,y;for(k=0;k Programing/C 2017. 4. 4. 02:53
C :: 달력 출력하기(2017년 기준) 이번에는 코딩과제만 주어졌다. 1. 달력 출력하기(2017년 기준) 2. 배열크기 N을 입력받아 N*N행렬을 만들고 오름차순으로 정렬하기 3. 위의 정렬을 역순으로 정렬하기 4. ㄹ 정렬하기 우선 내가 작성한 달력을 출력하는 코드는 아래와 같다 #include int i,j; void func_make(int day1[][7], int start){for(i=0;i Programing/C 2017. 4. 4. 02:50