150 likes | 357 Views
포인터와 배열. C 기초과정에서 배운 내용 복습. 포인터변수를 선언할 때는 타입과 이름을 지정해 준다 . int *ptr ptr 은 포인터 변수이다 . ptr 은 정수를 가리킨다. &k - 변수 k 의 주소 int k = 3; ptr = &k *ptr - ptr 이 가리키는 곳에 들어 있는 내용 (dereferenceing) int j = *ptr *ptr = 4;. 배열의 이름은 배열 첫 원소의 주소이다 . int my_array[] = {1,23,17,4,-5,100};
E N D
포인터와 배열 C 기초과정에서 배운 내용 복습 강원대학교 컴퓨터학부
포인터변수를 선언할 때는 타입과 이름을 지정해 준다. int *ptr ptr은 포인터 변수이다. ptr은 정수를 가리킨다. 강원대학교 컴퓨터학부
&k - 변수 k의 주소 int k = 3; ptr = &k *ptr - ptr이 가리키는 곳에 들어 있는 내용 (dereferenceing) int j = *ptr *ptr = 4; 강원대학교 컴퓨터학부
배열의 이름은 배열 첫 원소의 주소이다. int my_array[] = {1,23,17,4,-5,100}; 아래 두 문장은 동일한 문장 ptr = &my_array[0]; ptr = my_array; 강원대학교 컴퓨터학부
#include <stdio.h> int my_array[] = {1,23,17,4,-5,100}; int *ptr; int main(void) { int i; ptr = &my_array[0]; /* point our pointer to the first element of the array */ printf("\n\n"); for (i = 0; i < 6; i++) { printf("my_array[%d] = %d ",i,my_array[i]); /*<-- A */ printf("ptr + %d = %d\n",i, *(ptr + i)); /*<-- B */ } return 0; } 강원대학교 컴퓨터학부
#include <stdio.h> int my_array[] = {1,23,17,4,-5,100}; int *ptr; int main(void) { int i; ptr = &my_array[0]; /* point our pointer to the first element of the array */ printf("\n\n"); for (i = 0; i < 6; i++) { printf("my_array[%d] = %d ",i,my_array[i]); /*<-- A */ printf("ptr + %d = %d\n",i, *(ptr + i)); /*<-- B */ } return 0; } B 문장 대신 아래 문장을 넣으면? printf("ptr + %d = %d\n",i, *ptr++); printf("ptr + %d = %d\n",i, *(++ptr)); 강원대학교 컴퓨터학부
C에서 스트링은 null 문자로 끝나는 문자 배열이다. char my_string[40]; my_string[0] = 'T'; my_string[1] = 'e'; my_string[2] = 'd': my_string[3] = '\0'; char my_string[40] = {'T', 'e', 'd', '\0',}; char my_string[40] = "Ted"; 강원대학교 컴퓨터학부
#include <stdio.h> char strA[80] = "A string to be used for demonstration purposes"; char strB[80]; int main(void) { char *pA; /* a pointer to type character */ char *pB; /* another pointer to type character */ puts(strA); /* show string A */ pA = strA; /* point pA at string A */ puts(pA); /* show what pA is pointing to */ pB = strB; /* point pB at string B */ putchar('\n'); /* move down one line on the screen */ while(*pA != '\0') { *pB++ = *pA++; } *pB = '\0'; puts(strB); /* show strB on screen */ return 0; } int puts(const char *s); 강원대학교 컴퓨터학부
char *my_strcpy(char *destination, char *source) { char *p = destination; while (*source != '\0') { *p++ = *source++; } *p = '\0'; return destination; } int main(void) { my_strcpy(strB, strA); puts(strB); } char *my_strcpy(char *destination, const char *source); *ptr++ (*ptr)++ 강원대학교 컴퓨터학부
연습문제: 아래 함수를 구현하시오. void int_copy(int *ptrA, int *ptrB, int nbr); 강원대학교 컴퓨터학부
char *my_strcpy(char dest[], char source[]) { int i = 0; while (source[i] != '\0') { dest[i] = source[i]; i++; } dest[i] = '\0'; return dest; } 강원대학교 컴퓨터학부
아래 두 문장은 동일! while (*source != '\0') while (*source) // 요것이 더 빠르다. 강원대학교 컴퓨터학부
연습문제: 아래 함수를 구현하시오. strlen(); strcat(); strchr(); 강원대학교 컴퓨터학부
Pointers to Arrays int array[3] = {1, 5, 7}; 아래 두 문장은 동일하다. void a_func(int *p); void a_func(int p[]); int (*p1d)[10]; // p1d는 배열을 가리키는 포인터 int *p1d[10]; // p1d는 포인터의 배열 강원대학교 컴퓨터학부