목록프로그래밍 (30)
Jiyong's STUDY
메모리 공간을 공유하는 공용체 공용체는 union이라는 키워드를 이용하여 정의한다. union mem{int inum;char cnum;double dnum;}; union Mem; 과 같이 선언할 수 있다.언뜻 보면 구조체와 비슷하다는 느낌이 든다. 단지 struct가 union으로 바뀐 것 이외엔 차이가 없어 보인다. typedef union{int inum;char cnum;double dnum;}mem; 실제로, 구조체와 마찬가지로 typedef 선언 또한 가능하다. typedef union{int inum;char cnum;double dnum;}mem; int main(){mem u;u.inum=20;u.cnum='A';u.dnum=3.14;printf("%d, %c, %2lf", u.inum..
구조체의 포인터와 배열 구조체도 자료형이므로 배열과 포인터를 사용할 수 있다.구조체 배열과 포인터를 선언하는 방식은 매우 간단하다. 구조체 배열 typedef struct {char name[20];int number;int score;}students; int main(){ // 함수를 사용하지 않은 방식students stu[2]= {{"김민수", 1, 100},{"김영희", 2, 95} };printf("%d번 %s의 점수는 %d점 \n", stu[0].number, stu[0].name, stu[0].score);printf("%d번 %s의 점수는 %d점 \n", stu[1].number, stu[1].name, stu[1].score);} typedef struct{char name[20];in..
구조체란? 구조체는 C언어로 프로그램을 작성할 때 반드시 필요한 문법이다.그 필요성을 구조체를 모른다면 잘 모르지만 프로그램이 조금 복잡해지기 시작할 때,변수를 관리하면서 불편함을 느낄 것이다. 예를 들어 학생들의 성적을 입력받고, 그 결과를 출력받는 프로그램을 작성한다고 가정하면관리해야 할 변수들이 늘어나게 된다.학생의 이름, 번호, 성적 등등... 많아진다.구조체를 사용하지 않고 프로그램을 작성한다면 분명히 불편함을 느끼게 된다. 이런 경우에 구조체를 사용하여 관련된 변수들을 한번에 묶어 관리한다면 편하게 관리가 가능하다. 그럼 구조체가 무엇인가? 구조체는 사용자가 정의할 수 있는 자료형이다. 설명으로 하긴 어려우니 예시를 보여주면 struct students{char name[20];int numb..
void 포인터란? void 포인터는 말 그대로 형이 없는 포인터이다.포인터에는 type형에 대한 정보가 반드시 필요한데, 혼동이 온다면 void형 포인터라고 봐도 무방하다. void 포인터의 특징으로는 어떠한 type형을 가진 변수 또는 상수도 저장이 가능하다.하지만 type형에 대한 어떠한 정보도 없는 포인터이므로 * 연산은 불가능하다. 즉 주소값은 저장이 가능하지만 그 주소값에 대한 참조가 불가능하다는 의미이다. 예제로 확인하면 int main(){int num=0;void *ptr=#*ptr=20; // 컴파일 에러가 나는 부분printf("%d", num);} 결과 >> 컴파일 에러 위에서 말했듯이 type형에 대한 정보가 없으므로 그 주소값이 무엇을 의미하는지 알 수 없다.그래서 * 연..
함수 포인터란? 함수의 구조를 보면 type FunctionName(type a...) 함수에는 type형의 정보와 전달 인자의 정보가 항상 있다.그렇다면 이것을 보고 어쩌면 함수도 포인터가 아닐까?라는 생각을 할 수 있는데실제로 함수의 이름은 함수가 할당되어 있는 메모리를 가리키는 포인터이다.정확히는 함수 포인터 상수라고 할 수 있다. 그렇다면 함수 포인터 변수는 어떻게 선언할까? 그 전에 함수 포인터의 포인터 형을 알아보자면 int FunctionName(int a, double b); 반환형이 int이며, 전달 인자로 int형, double형을 하나씩 받는다고 설명해야 한다.즉 함수 포인터의 포인터 형에는 반환형과 전달 인자의 선언에 대한 정보가 담겨있다. 그렇다면 함수 포인터 변수를 선언할 때 그..
일반적으로 C언어를 처음 배울 때 보는 코드는 int main(void){printf("Hello World! \n");return 0;} 이다. 여기서 main 함수를 파헤쳐 보면 int main (void) int는 main 함수의 반환형이다.C언어에서는 void로 선언을 해도 무관하며,반환형이 int인 이유는, return 값을 통해서 프로그램이 정상 종료했는지 판단하기 때문이다. 일반적으로 0을 리턴하는데, 리턴값이 0인 경우엔 정상적인 종료를 했다는 의미이다.0이 아닌 값이 리턴되었다면 이는 비정상적인 종료라는 의미를 가진다. 중간의 main은 함수의 이름이다. 그리고 마지막 void는 전달 인자를 뜻한다. void 또는 공백이라면 인자를 전달하지 않겠다는 의미이다. 하지만, void가 아니라 ..