2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
포인터란? 사전적 의미로써 지시자 혹은 가리키는 것으로 풀이할 수 있으나, C프로그래밍 언어에서는 메모리의 주소를 저장하는 변수이다. 포인터 자체가 하나의 변수이기 때문에 포인터도 메모리 내에서 선언이 되며 일반 상수를 저장하는 변수가 아닌 주소값을 저장하는 변수라는 점에서.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
Chapter 14 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
8. 배열.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
Chapter 09 배열과 포인터.
3. printf()와 데이터 형식.
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6장. printf와 scanf 함수에 대한 고찰
14장. 포인터와 함수에 대한 이해.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
상수와 기본 자료형.
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
C언어 프로그래밍의 이해 Ch08. 배열과 문자열.
5장 배열과 문자열 C 프로그래밍.
Chapter 05. 입출력 함수.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
Canary value 스택 가드(Stack Guard).
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
제 6 장 함수(functions).
구조체 (Structure).
Chapter 09. 포인터 1.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 4 장 Record.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
Presentation transcript:

2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터

2. 메모리와 주소 정수형 배열의 메모리 할당 aa == &aa[0] *aa == aa[0] 배열의 주소 표현 따라서 또는 aa == &aa[0] *aa == aa[0]

01 #include <stdio.h> 02 03 int main( ) 04 { 05 int aa[3] = {10, 20, 30}; 06 07 printf("aa[0]의 값은 %d, 주소는 %d\n", aa[0], &aa[0]); // 배열의 자리 값과 주소를 출력 08 printf("aa[1]의 값은 %d, 주소는 %d\n", aa[1], &aa[1]); 09 printf("aa[2]의 값은 %d, 주소는 %d\n", aa[2], &aa[2]); 10 printf("배열 이름 aa의 값(= 주소)는 %d\n", aa); // 배열 이름(aa 주소)을 출력 11 }

aa 값을 1031로 가정하고 aa+1을 계산한 결과는 무엇일까? 배열의 이름 활용법 (포인터 연산) aa 값을 1031로 가정하고 aa+1을 계산한 결과는 무엇일까? 예상 결과 : aa+1 → 1031 + 1 = 1032 (X) 실제 결과 : aa+1 → 1031 + 4 = 1035 (O) 계산 과정 ‘+1’의 의미 : 배열 aa의 위치에서 한 칸 건너뜀 한 칸의 크기 : 배열 aa가 정수형 배열이므로 4바이트 즉, aa+1 = &aa[1] = 1035 포인터 표기법과 배열 표기법 aa + i == &aa[i] *(aa + i) == aa[i]

01 #include <stdio.h> 02 03 int main( ) 04 { 05 int aa[3] = {10, 20, 30}; 06 07 printf("&aa[0]는 %d, aa+0은 %d \n", ___①__ , aa+0); 08 printf("&aa[1]는 %d, aa+1은 %d \n", &aa[1], ___②__ ); 09 printf("&aa[2]는 %d, aa+2는 %d \n", &aa[2], ___③__ ); 10 } ---&aa[0] == aa + 0 ---&aa[1] == aa + 1 ---&aa[2] == aa + 2

4. 배열과 포인터의 관계 문자형 배열과 문자열 포인터 I T - C o K B k 문자 하나 표현 : char 문자열 표현 : s[12] 포인터 선언 및 초기화: 이 경우 배열 s와 포인터 p는 호환 가능 (포인터 표기법과 배열 표기법): I T - C o K B k \0 char *p = s; *(p + 3) == s[3]

실습과제1: [기본 9-8] 문자열과 포인터의 관계 ① 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char s[8]= "Basic-C"; 06 char *p; 07 08 p = s; 09 10 printf("&s[3] ==> %s\n", &s[3]); 11 printf("p+3 ==> %s\n\n", p+3); 12 13 printf("s[3] ==> %c\n", s[3]); 14 printf("*(p+3) ==> %c\n", *(p+3)); 15 } ---문자형 배열을 선언하고 초깃값을 대입한다. ---문자형 포인터 변수를 선언한다. ---p에 배열 s의 주소를 대입한다. ---문자열과 포인터의 주솟값을 %s로 출력한다. ---문자와 포인터의 실제 값을 %c로 출력한다.

실습과제2: [응용 9-9] 문자열과 포인터의 관계 ② 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char s[8]= "Basic-C"; 06 char *p; 07 int i; 08 09 p = __①___ ; 10 11 for( i=sizeof(s)-2; i>=0; i-- ) 12 printf("%c", *( __②___ ) ); 13 14 printf("\n"); 15 } ---포인터 변수에 배열 주소를 대입한다. ---문자형 배열의 끝부터 배열의 개수만큼 반복한다. -----포인터 변수가 가리키는 곳의 문자 하나를 출력한다.

참고: sizeof(s): 배열의 크기(8) 12행: (p+i)의 실제 값 출력  *(p+i) (p+6)  (p+5)  (p+4)  (p+3)  (p+2)  (p+1)  (p+0)

실습과제1:[기본 9-8] 문자열과 포인터의 관계 ① 실습과제2:[응용 9-9] 문자열과 포인터의 관계 ②

실습과제 3번 #include <stdio.h> int main(void) { int i = 0; int point[] = {95, 88, 76, 54, 85, 33, 65, 78, 99, 82}; int arrlen = sizeof(point) / sizeof(int); printf("배열 표기를 이용하여 원소값을 출력\n"); for (i = 0; i < arrlen; i++) { // 배열 표기법 printf("%d%s", point[i], (i == arrlen – 1) ? "\n\n" : ", "); } printf("포인터 연산을 이용하여 원소값을 출력 \n"); for (i = 0; i < arrlen; i++) { // 포인터 표기법 printf("%d%s", *(point + i), (i == arrlen – 1) ? "\n\n" : ", "); return 0;

실습과제 4번 #include <stdio.h> int main() { char msg[] = {'H', 'e', 'l', 'l', 'o', '!', '\0'}; int i = 0; 1. 문자열 msg를 참조하는 포인터를 ptr이라는 이름으로 선언 printf("%s\n", msg); // 문자열 msg 출력 : 1번 while (msg[i]) { // 문자배열 msg 출력 : 2번 printf("%c", msg[i]); ++i } printf("\n"); 2. 포인터 ptr을 이용하여 문자열 msg 출력 (1번과 유사하게 한 줄로 완성) while (*ptr) { // 2번과 유사하게 포인터 ptr을 이용하여 msg 출력 3. 포인터 ptr이 가리키는 문자를 출력 ptr = ptr + 1; return 0;