본문 바로가기

C언어

포인터 와 배열 ●포인터 와 배열 “배열명은 포인터 다!” 이말은 곧 배열명은 그 배열의 첫 번째 기억공간의 시작 주소 상수 이다. 이는 “첫 번째 배열의 주소 값“ 하고는 그 계념이 틀리다. ex)char arr[5]; char *ap = arr; 으로 선언 했다고 가정 한다면 ap == &arr[0] 라고 볼수가 있다. 여기서 arr은 첫 번째 기억공간의 주소값을 문자화 시킨것이라고 볼 수 있다. 이런 사실을 통해 다음과 같은 법칙이 성립한다. arr[0] == *(arr+0) == *(ap+0) == ap[0] ex)int ary[10]={1,2,3,4,5,}; int *ip = ary; printf("%u\n",ary);//3가지 모두 같은 값이다. printf("%u\n",ip); printf("%u\n",&a.. 더보기
포인터 연산 ●포인터 와 포인터 변수의 연산 포인터 와 포인터 변수의 연산은 상당히 제한적이다. 포인터 변수에 포인터를 할당할때는 가리키는 자료형이 일치해야만 한다. ex)int in; float *fp = ∈ //이는 불가능한 연산이다. ○포인터 또는 포인터 변수에 정수값을 더할수 있다. 예를 들어서int in; int *ip = ∈ in=100번지 ip=100번지이라는 포인터가 선언 되었다고 가정한다면 ip안에 in변수의 시작 주소값이 할당 될 것이다. 이를 100이라고 보자. 이면, 와 같다 여기서 ip+1;을 수행한다면 100+1이 수행 되는 것이 아니라 100+(1*4)가 연산이 되는 것이다. 여기서 한마디로 포인터 + 정수*sizeof(*포인터) 로 연산이 수행되는 것이다. 여기서 sizeof(.. 더보기
포인터 기본 응용 함수는 필요에 따라 x포인터를 리턴한다. ex)char *strcpy(char *des, char *src) char string1[80]' char string2[] = "Hanbit online"; char *sp; sp = strcpy(string1, string2); printf("%s\n",string1); printf("%s\n",sp); printf("%s\n",strcpy(string1, string2));//printf함수 내에서 바로 복사가 가능 ●NULL포인터 NULL포인터는 0번지를 가리키는 것이 아니라 아무 것도 가리키지 않음을 의미한다.(실제 NULL의 숫자값은 0이다.) NULL포인터 변수는 NULL로 초기화 하여 예상치 못한 프로그램의 오류를 방지한다. ●const 포인터 변.. 더보기
포인터 ●포인터 ⦁포인터란 특정 기억공간 의 시작 주소값이다. 특정 기억공간 : 특정 자료형의 변수 ex) int a⟵a는 특정 자료형의 변수이다. 시작 주소값 : 자료형의 크기가 1바이트 이상일수 있기 때문이다. ⦁포인터는 자료형에 대한 정보를 담고 있다.(특정 자료형을 가리킨다) ⦁포인터는 일정크기를 갖는 정수값이다.⦁포인터는 가리키는 기억공간이 다를지라도 포인터 자체의 크기는 항상 일정하다. ex)char ch; printf("size of pointer : %d\n",sizeof(&ch)); printf("address : %p\n",&ch); 위의 예문은 포인터를 구해서 크기와 값을 출력하는 것이다. 첫 번째 &ch 는 1이 나올것이고 %p(주소값을 출력하는 변환지정자이다)값은 16진수로 ch의 주소가.. 더보기
typedef(형 제정의 문) ●typedef 형(type)재 정의문 이라도고 하는 typedef문은 기존의 자료형에 새로운 이름을 붙이는 것이다. 이는 읽기 쉬운 의미의 프로그램 작성이 가능해진다. typedef type-declaration; 으로 여기서 type-declaration이 변수명이 아닌 데이터형 이름(int나 float같은...)dlfksms 것을 제외하면 변수 선언과 동일하다. ex)typedef int count; count flag; 를 선언 했다고 한다면 count는 int를 의미하는 것이다. 즉... count = flag;는 int flag와 같다는 의미가 된다. 이러한 기능은 #define과 별반 다를게 없어 보이는데 typedef문은 #define문의 범위 이상의 복잡한 객체를 정의하는 데 사용된다. .. 더보기
공용체 ●공용체 공용체(Union)란 서로 다른 자료형을 가진 데이터들이 동일한 기억장소를 “공유”하며 기억되는 형태를 말한다. ◎공용체의 정의 union union-name{ field-type field-name; field-type field-name; }; 이는 구조체 와 명령어 외엔 별반 다를게 없다 하지만 구분이 되는 것은 기억장소가 하나만 만들어 진다는 점이다. ex) union union-name{ long int i_value; float f_value; }; 라는 두 개의 공용체 필드를 만들었다고 한다면 이 기억 할당은 아래의 그림과 같이 이루어 진다. 4바이트로 할당 구조체는 필드 수만큼 매모리가 할당되지만 공용체는 단하나의 매모리가 할당된다. 그리고 i_value와 f_value가 동시에 .. 더보기
구조체 ●구조체 한 개체와 관련된 서로 다른 데이터 형들을 묶어서 하나의 자료형으로 표현한 것이다. 이때 한 개체는 서로 데이터 형들이 다르다 이를 묶어서 자료형을 만든다는 의미이다. ◎구조체 정의 struct structure-name{ field-type field-name; field-type field-name; (자료형) (변수명) }; 이때 정의는 반드시 메인함수 밖에서 해줘야한다. ex)struct student{//반드시 매인함수 밖에 정의 해준다... int number;//number을 int 형으로 정의 char name[30];//name을 char형으로 정의 int year;//year을 int 형으로 정의 }; 이 정의에서 구조체 명은(structure-name)생략이 가능하다. 하지만.. 더보기
해더파일들 간단한 설명 간단한 헤더 파일 리스트 ALLOC.H, MALLOC.H :메모리 설정 및 해제에 관련된 함수 포함 ASSERT.H :assert(), abort condition 검사. BIOS.H :ROM-BIOS 인터럽트 함수를 이용한 함수들 포함 대표적 함수로 bioskey()함수가 있다. CONIO.H :텍스트 화면을 제어하는 함수 포함 CTYPE.H :문자 검사 및 변환 함수 포함. 예를 들어 대문자를 소문자로 변환할 경우 tolower()함수 사용. 문자가 알파벳인지 아닌지 검사할때 isalpha() 함수 사용. DIR.H, DIRENT.H :OS의 디렉토리 관리에 관련된 함수 포함. DOS.H :DOS 인터럽트를 이용한 함수 포함. 각종 하드웨어 제어에 관련된 함수들이 있다. GRAPHICS.H :그래픽 .. 더보기