본문 바로가기

반응형

Algorithm/C프로그래밍

(37)
[7주차] 구조체 #11.4 구조체 포인터 구조체 포인터 구조체 변수를 가리키는 포인터 즉, 구조체 변수의 시작 주소가 저장된다. 기본적인 사용법은 일반적인 포인터와 동일하지만 구조체 포인터에서만 사용하는 문법이 있다. ※ 구조체 멤버로 포인터를 사용하는 것과 구분해야 함. 그 경우는 아래의 코드. struct student { char *name; }; 구조체 포인터 변수 선언 및 연결 일반 포인터 선언과 동일: * 사용 주소 연산자(&): 구조체 변수의 시작 주소 struct student st1 = {10, "Tom", 3.2}; struct student *pst;// 구조체 포인터 변수 선언 pst = &st1;// 연결 간접 연산자(*)를 이용한 구조체 변수 접근 st2 = *pst; 간접 참조를 이용한 구조체..
[6주차] 구조체 #11.1 구조체 개요 구조체(structure) 의미상 관계가 있는 항목을 그룹으로 묶어 표현한 자료형 구조체는 변수의 모양(type)이다. 차이는 int, char은 기본적으로 정해져 있는 기본 자료형이고, 구조체는 사용자가 용도에 맞게 만들어서 사용하는 사용자 자료형이다. 구조체 구성하는 변수들을 멤버라고 부른다. ※ 구조체의 개념과 문법적 성질은 배열(동일한 정보의 단순 모임)과 매우 다르다. 구조체는 자료형 다른 것도 묶을 수 있다. 비교하면 더 헷갈리니 분리해서 공부하자. #11.2 구조체의 정의, 선언, 사용(1) 구조체 정의 자료형(변수의 모양)을 정의하는 것 - 변수 선언과는 다른 개념 struct 키워드 사용 struct 구조체자료형이름 { 멤버자료형 멤버변수; 멤버자료형 멤버변수; }..
[10주차] 동적 할당 #12.2 동적 메모리 사용 절차(2) 🏃‍♂️ 동적 메모리 할당 함수 사용법을 익힌다. 동적 메모리 해제: free() 함수 지정된 메모리 공간을 해제(free) 함수 원형 void free(void *ptr); 함수 인자 해제할 메모리 공간을 가리키는 포인터 변수 기능 ptr이 가리키는 메모리 해제 ※ ptr 변수 자체를 해제시키는 것이 아니다. ex. int *p = NULL; p = (int *)malloc(10*sizeof(int)); free(p); // p가 가리키는 영역 해제 ex. 1. 정수 한 개를 저장할 수 있는 메모리 공간 할당하고 해제하기 2. float형 실수 한 개를 저장할 수 있는 메모리 공간 할당하고 해제하기 3. double형 실수 15개를 저장할 수 있는 메모리 공간 할..
[9주차] 동적 할당 #12.1 동적할당 개요 정적 메모리 할당 프로그램 실행 전에 변수의 메모리 할당 크기가 정해지고 메모리 할당 크기가 실행하는 중에 변하지 않는 방식을 정적 할당이라고 한다. 지금까지는 "변수 선언"을 통해서 기억 장소를 확보했다. 변수는 코드 작성 단계에서 정해지고, 할당되는 메모리 크기는 프로그램을 실행할 때마다 일정하다. char ch;// 1 바이트 - 일반 변수 int score[10];// 40 바이트 - 배열 변수 struct student {int id; float avg;} st1;// 8 바이트 - 구조체 변수 int *pi;// 4 바이트 - 포인터 변수 정적 할당 방식의 문제점 필요한 메모리 크기를 모를 때, 최대로 큰 크기를 가정해서 변수를 선언해야 한다. 프로그램 실행 전 메모리..
[5주차] 문자열 문자열의 저장 방식 #10.4 문자열의 배열 🏃‍♂️ 다수의 문자열을 처리하는 방법을 학습한다. 다수의 문자열 처리하기(1): 문자 배열을 여러 개 사용 2차원 문자 배열 이용 int i; char num[3][5] = {"zero", "one", "two"}; for( i=0; i 0 문자열 lhs>rhs -> 양수 문자는 단순히 아스키 코드 값 비교함. 널 문자 '\n'가 가장 작음 문자가 같을 경우 다음 문자로 이동해서 비교 참고: strncmp() 함수: 비교할 문자열의 길이를 지정하는 함수 char s1[50] = "hi", s2[50] = "hello"; int cmp_result = strcmp(s1,s2); if(cmp_result gets_s() 사용 gcc의 경우, 아직 gets()를 ..
[4주차] 문자열 #10.1 문자열 개요 문자열(string) 연속적으로 나열된 문자들의 묶음 문자 배열을 사용해 저장 배열과 반복문을 사용하면 문자 단위로 초기화하고 출력하는 코드를 작성할 수 있지만 문자열을 이용하면 보다 더 쉽게 처리할 수 있다. 예를 들면, 아래의 두 코드는 같은 기능을 구현한 것이다. 1. 배열 + 반복문 char str[8] = {'H','e','l','l','o'}; int i; for (i=0;i
[2주차] 포인터(3), (4) #9.3 배열과 포인터 배열 이름의 비밀 배열 이름 == 배열의 0번 원소의 시작 주소를 의미 따라서 정수형 배열의 자료형은 int * &ar은 전체 배열의 시작 주소 ar과 값은 같지만 다른 자료형(13장) 주소를 이용한 배열 참조 배열 이름은 주소를 의미 -> 참조 연산자와 사용 가능 배열을 포인터 변수에 연결하여 사용하기 포인터 변수에 대한 증감 연산 -> 포인터 변수가 나타내는 자료형의 크기 단위로 증감 포인터 변수도 배열의 첨자 형태로 값 참조 가능 배열과 포인터 주의사항 포인터를 배열의 중간 원소에 연결시키는 것도 가능 -> 포인터는 단지 자신이 가리키는 주소를 기준으로 배열 쓸 수 있음 포인터 참조 연산자 사용 시 괄호 유의(연산자 우선순위) 포인터 변수의 증감량은 가리키는 배열의 원소 크기..
[1주차] 2. 포인터(2) #9.2 포인터 선언과 사용 포인터 (변수) 선언 구문 변수명 앞에 *(참조연산자) 붙임 포인터 대입(연결) 포인터 (변수)에 주소를 대입해서 특정 변수와 연결시키는 것을 "가리킨다"라고 표현(->) 포인터 참조 포인터 (변수)가 가리키는 변수에 접근하는 것 참조 연산자 * 사용 간접 접근: *pch = 'B' 직접 접근: ch = 'B' 포인터 주의사항 선언 후 연결 없이 바로 사용하면 런타임 오류(연결 안 하면 쓰레기값 들어있음) 반드시 어떤 변수에 연결한 후 사용해야 함 &(주소연산자)는 포인터를 포함한 모든 변수에 사용가능하지만, *(참조연산자)는 포인터 변수에서만 가능! 포인터 자료형과 연결된 변수의 자료형은 일치해야 한다. 서로 다른 자료형의 포인터 간 대입은 문법적으로 허용되기도 하지만 프로..

반응형