printf("ho_tari\n");
ep.23 문자열, 포인터2 본문
2024.8.7
• 포인터 변수에 사용할 수 있는 연산, 결괏값의 자료형, 연산의 결괏값
• C 언어의 포인터는 배열과 밀접하게 관련
배열 이름은 배열의 시작 주소
• 배열의 변수 이름은 배열의 시작 주소를 나타내는 포인터 변수
• 하지만 일반 포인터 변수와는 달리 배열 변수는 다른 주소 저장 불가
포인터 연산을 이용한 배열 접근
포인터 변수와 증감 또는 복합 연산자를 이용한 배열 접근
배열에서 인덱스를 표현하는 []는 연산자임
• 배열에서는 안되지만, 포인터와 사용할 때 음수 인덱스도 사용 가능
포인터 연산자의 우선순위
• 괄호의 유무에 따른 동작
배열 == 포인터?
• 배열이 포인터 연산을 이용해서 구현되기는 하지만, 배열과 포인터가 같지는 않음
• 배열 이름은 배열의 첫 번째 요소의 시작 주소
• 배열 이름을 sizeof 연산자에 전달하면 배열의 크기 반환
• 포인터는 주소만 저장하는 변수
• 함수의 반환_자료형에 포인터는 사용 가능/배열은 사용하지 못하는 것도 차이점
함수에 포인터를 전달하면 얻을 수 있는 효과
포인터 매개변수로 함수 외부 변숫값 변경
포인터 매개변수로 함수에 큰 데이터 효율적으로 전달하기
함수에 배열 전달
함수 이름의 의미와 함수 자료형
• 함수 이름 : 함수 코드가 있는 메모리 주소
• 함수를 구별하는 방법 : 함수의 반환 자료형 및 매개변수를 확인
• 함수나 매개변수의 이름은 중요하지 않음
함수 포인터 자료형 선언
• 함수 포인터 변수를 선언에 typedef 붙이기
• 매개변수 이름 생략
void 포인터 자료형
• 자료형이 정해지지 않은 특별한 포인터 자료형
세 가지 특징
• void 포인터로 선언된 변수는 어떤 자료형의 포인터 값이라도 저장 가능
• 매개변수를 void 포인터로 선언하면, 함수를 호출할 때 어떤 자료형의 포인터라도 전달 가능
• void 포인터로 선언된 변수는 간접 참조를 통해 값을 저장하거나 사용 불가
문자열(string)은 널 문자('\0')로 종료되는 일련의 문자 배열
문자 배열 형태로 선언되는 문자열
• 크기 없이 문자 배열을 선언하고 문자들로 초기화
• 정해진 크기의 배열을 선언하고 문자열 초기화
• 문자 배열을 선언하고 문자열 상수로 초기화
포인터 변수로 선언되는 문자열
• char 형 포인터 변수를 선언하고 문자열 상수로 초기화
• 포인터 변수에 문자열 상수의 주소가 저장됨
문자열 상수는 변경 안됨
문자열을 다른 문자 배열에 저장하려면 strcpy() 함수 사용
문자열과 메모리 구조
• 배열로 선언되는 문자열은 일반 변수처럼 메모리에 저장됨
• 함수 밖이나 정적 지역변수로 선언한 문자 배열은 전역변수가 저장되는 데이터 영역에 만들어짐
• 반대로 지역변수로 선언하는 문자 배열은 스택에 공간 확보
• 문자열 상수는 프로그램에서 사용하는 상수들을 저장하는 곳에 생성됨
• 일반적으로 상수들은 데이터 영역에 저장됨
• 포인터 변수에 문자열 상수를 저장할 때 포인터 변수는 변수 선언 위치에 따라 데이터나 스택에 저장됨
키보드로 문자열 입력받기
• scanf() 함수
▪ gets() 함수
• fgets() 함수
fgets() 함수가 함수 실행을 종료하고 반환하는 경우
포인터 배열 목적
함수 포인터 배열
인터럽트(interrupt)
• 보통 번호가 붙으며 다양한 종류가 있음
• 예를 들면, 키보드 입력, 마우스 입력같은 작업들이 인터럽트로 처리
• 숫자를 0으로 나누었을 때 인터럽트가 발생
인터럽트 핸들러(interrupt handler)
• 인터럽트 핸들러 또는 인터럽트 서비스 루틴(interrupt service routine)
• 특정 인터럽트가 걸렸을 때 실행되는 코드
인터럽트 벡터(interrupt vector)
• 인터럽트 핸들러의 코드 위치를 저장한 1차원 배열
포인터의 포인터
• 포인터의 포인터는 포인터 변수를 가리키는 포인터
• ‘이중 포인터(double pointer)’라고도 함
• 포인터의 포인터는 변수를 선언할 때 ‘*’ 기호를 두 개 붙임
• 포인터를 사용하는 문자 배열처럼 typedef를 사용하면 일반 포인터처럼 단순화도 가능
문자열과 숫자의 변환
• 숫자를 문자열로 변환하는 것은 sprintf()나 snprintf()를 사용
• 문자열을 숫자로 변환하는 것은 sscanf() 함수를 사용
• C 표준 라이브러리는 이것 외에 문자열을 숫자로 변환하는 여러 가지 함수들을 제공
str
• 변환할 숫자를 저장한 문자열
ptr
• 변환 과정에서 오류가 없는지 확인하는 데 필요
• 변환된 값이 자료형의 범위가 넘어 오버플로(overflow) 또는 언더플로(underflow)가 발생하면 정해진 값들이 반환
errno
• C 표준 라이브러리에서 오류를 표기하기 위해 사용하는 전역변수
문자열 복사
▪ strncpy() 함수
문자열 길이 확인
▪ str
• str의 길이를 바이트 단위로 반환
• 빈 문자열(널 문자가 가장 첫 번째 문자인 문자열)은 0을 반환
문자열 연결
▪ strcat() 함수
• dest 문자열 뒤에 src를 덧붙이고 dest를 반환
• src가 빈 문자열이라면 strcpy()와 동일한 효과
문자열 비교
▪ strcmp()와 strncmp() 함수
• 두 함수는 문자열 s1과 s2를 사전식으로 비교
• src가 빈 문자열이라면 strcpy()와 동일한 효과
• s1이 s2보다 작다는 것은 두 가지로 구분
문자열 잘라내기
▪ strtok() 함수
일정한 값으로 메모리 공간 채우기
▪ memset() 함수
다른 메모리 공간과 메모리 공간의 비교
▪ memcmp() 함수
다른 메모리 공간에 메모리 공간 복사
▪ memcpy()와 memmove() 함수
• 정수 배열 100개를 arr로 선언
• 초기화한 다음 다른 배열 arr2에 memcpy( ) 함수를 이용해서 복사
메모리 영역에서 특정 값 찾기
▪ memchr() 함수
명령행 인자
• 프로그램을 실행하면서 필요한 정보를 전달하는 문자열
• 윈도우와 리눅스(혹은 맥) 운영체제의 터미널 환경에서 파일을 복사할 때 사용하는 명령
오늘 오후 수업시간에는 파이썬 정규 평가가 이루어졌다. 코딩 시험이라니..
'두산 로보틱스 부트캠프 ROKEY > C 교육' 카테고리의 다른 글
ep.22 배열, 포인터1 (0) | 2024.08.06 |
---|---|
ep.21 반복문, 함수 (0) | 2024.08.05 |
ep.20 전처리기, 연산자, 표준 입출력 함수, 조건문 (0) | 2024.08.02 |
ep.19 자료형, 변수, 상수, printf() 함수 (0) | 2024.08.01 |