반응형

프로그래밍/C언어 39

C프로그램의 메모리모델.(작성중)

C언어로 작성된 프로그램은 주기억장치를 효율적으로 사용하기위하여 보통 64KB 크기의 논리적단위로 나누어서 할당과 할당해제로 관리하게된다. 이 논리적 단위를 세그먼트(segment)라한다. 세그먼트는 코드세그먼트, 데이터세그먼트로 구분해서 사용하고, 데이터세그먼트는 기억장소의 할당방법에 따라 정적세그먼트와 동적세그먼트로 나뉘게된다. 또한 데이터세그먼트는 동적할당에의해 관리되어지는 스택세그먼트, 힙세그먼트,와 정적할당에 의해서 관리되어지는 정적(Data) 세그먼트로 구분되어진다. 데이터세그먼트에 데이터를 저장하기 위해서 할당되어진 기억장소를 변수라고한다. 함수호출문장은(리턴값) 레지스터에 저장이된다. 전처리기나 컴파일러는 컴파일할 때 원시 코드에서 기술되어진 단어나 기호들에대해 의미를 해석하고 처리한다. ..

배열의 특징 C언어

배열의 특징 C언어 배열명은 포인터 상수이다. 포인터 상수는 주소값이 고정이라는 뜻이다. 예외)sizeof 연산자의 피연산자로 사용될 때만은 포인터상수로 취급되지 않고 배열 그자체로 취급된다 배열을 한번에 초기화하고싶다면 선언과 동시에 해야한다. 선언과 동시에 초기화를 할 때, = 는 대입(Operator)가아닌, = 초기화 구두점이다(Punctual) 때문에 선언후에는 한번에 초기화 할 수가 없다. 선언과 동시에 초기화를 안한다면, 배열 요소 하나하나를 직접 입력 해야한다. 상수는 좌변값이 될 수 없기때문에 배열명은 좌변값이 될 수가 없다. 배열 선언시 배열의 크기는 상수로 해야 한다. 배열 선언시 첨자를 변수로 지정한 경우에 값을 집어 넣는 시점에서 문제가 생긴다. 꼭 상수로 해야하지만 C++에선 선..

포인터사용시 주의점(C언어)

포인터는 변수를 가르키는 변수다. int*a; ---------- *a=3; printf("%d", *a); 이런식으로 사용하게되면 3을 담는 변수가 없기때문에 에러가난다. 참고 : 컴파일러에따라선 위 코드가 에러가 안날 수 있다. 그럼 같은식으로 int *b; int *c;를 선언하여 코드를 추가해보면 에러가 날 것이다. 사용법은 존재하는 변수의 주소값을 입력하는 형태로 사용한다. int b; a=&b; ------------ 위에 추가해준다. char* src = "abcde"; // 이것은 src[6] 의 배열이 만들어진것과 같다. char* a; 이경우는 불완전한 선언이다. 포인터 a 가 가르키는 변수가없기때문에 값만 입력한다면 에러를 발생시킬것이다. 그래서 위와같이 "abcde" 로 값을 대입하..

C언어 getch

사용자가 입력시까지 대==기한다. 입력문자를 받아 입력문자를 리턴한다. 입력문자를 화면에 출력하지는 않는다. 입력문자가 확장키일경우 0을 리턴한다. 사용예 int ch; // 이경우 int 값으로 해야한다. ch=getch(); // 문자를 getch()로 받아서 ch에 담을때 int자동캐스팅되어 아스키코드값으로 담긴다. if (ch==0xE0||ch==0) { ch = getch(); printf("%d", ch); } 다음은 입력한 문자와 아스키코드값으 리턴해준다. for (i=0;i

const 키워드

const키워드의 기본적인 기능은 상수의 정의이다. 사용법 const int i = 7; // 변수 i가 정수 7로 상수가되었다. int arr[i]; // 배열의 인수로 상수만 와야한다. i에 const 선언을 하지않을경우 error 발생 const는 선언과 동시에 초기화 해준다. 선언만 하는 경우는 참조상수화를 하는경우이다. 예를들어 함수내에서 외부변수를 인수로 갖을때 const를 사용하면 외부변수를 참조하되 변경을 하지않도록하는 안전장치로 const 키워드를 사용한다. **법칙1 const 상수의 주소값을 읽는것은 에러 const값을 읽는다는것은 그 참조대상을 변경할수있는 가능성을 주는 행위이다. 그러므로 봉쇄된다. 다음예를보자 const int i = 7; int *pi; pi=&i; //에러가남..

난수생성 C언어

//설명 : rand() 함수는 난수를 발생시킨다. 보통 random() 이나 randomize()로 사용한다. 다른 방법을 소개하겠다. 위 코드는rand 함수로 0~99까지의 난수를 발생시킨다. srand는 난수를 시드를 받아서 그수에 매핑해서 난수를 발생시킨다. 범위가 일정한 난수를 그때 그때 다르게 발생하려면 시드를 계속 바꾸면서 난수를 생성하면 된다. time은 1970년 1월1일 00시00분00초 를 기준으로 주어진 시간값까지 지난 시간을 리턴해준다. NULL인경우 현재를 나타낸다. 기발하다. **참고 random 함수는 기본라이브러리에 포함되지 않은듯 하다. rand 함수 - #define Rand_MAX 0x7fff 단점 : 실행시킬때마다 난수의 발생 순서가 동일하다. (컴퓨터마다 다른지 어..

배열과 문자열의관계 C언어

C언어는 문자를 배열로 다룬다. 문자열은 말그대로 문자들의 나열이다. 이곳에서 주로 다룰 내용은 기초적인 내용보다는, 공부를 해나가면서 상식적(자연스럽게)으로 이해하기 힘든내용을 요약정리해두겠다. 배열의 기본 문법은 안다는 전제하에 설명을 하겠다. 배열로 문자열를 다루는 법 일반적인 설명보다는, 예를 들어설명하겠다. char a='a'; // 문자를 다루는 '따옴표다 문제없이 a변수에 a가 입력된다. char a="a"; // 에러가난다 a를 "로묶어놨기때문에 문자열로 인식한다. 이상태에서에러가 안나게 고치려면? char*a="a"// 문자열로 인식하고 에러가 안 난다. 그럼 왜 포인터로 선언하면 에러가 안나는걸까. C에서는 String형이 없다. 위와같이 char 형이다. 그래서 C에서는 문자열 인식 ..

반응형