c언어에서의 포인터(pointer)
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1 1차원배열과 포인터의 관계

2 포인터연산

3포인터배열

4 2차원배열과 포인터배열의 관계

5 이중포인터

본문내용

0; a[1] = 20; a[2] = 30; a[3] = 40;
p=a;
배열 a의 번지가 100번지부터 시작된다고 가정할 때
번지 표현
메모리배치
데이터 표현
배열명
배 열
포인터
번지값
데이터값
배 열
배열명
포인터
a
&a[0]
p
100
10
a[0]
*a
*p
a+1
&a[1]
p+1
104
20
a[1]
*(a+1)
*(p+1)
a+2
&a[2]
p+2
018
30
a[2]
*(a+2)
*(p+2)
a+3
&a[3]
p+3
112
40
a[3]
*(a+3)
*(p+3)
포인터간의 연산에는 정수형의 덧셈, 뺄셈만이 허용되고 곱셈과 나눗셈은 할 수 없고,
포인터 간의 덧셈, 뺄셈은 허용되지 않는다.
올바른 연산
올바르지 못한 연산
p = p + 2
p = p - 3
++p, p++
--p, p--
p = p1 + p2
p = p / 2
p = p * 2
[예제 6-5.C]
#include
main()
{
static unsigned short a[4] = {0x1234, 0x5678, 0x9abc, 0xdef0)
unsigned char *p1;
unsigned int *p2;
ungigned long *p3;
(unsigned short *)p1= (unsigned short *)p2= (unsigned short *)p3=a;
printf("연산전 p1=%x, *p1=
p1=p1+3;
printf("연산후 p1=%x, *p1=
printf("연산전 p2=%x, *p2=
++p2;
printf("연산후 p2=%x, *p2=
printf("연산전 p3=%x, *p3=
++p3
printf("연산후 p3=%x, *p3=
}
3 포인터 배열
포인터 배열이란 동일한 형(type)을 갖는 포인터 변수들이 하나의 이름으로 모여있는
형태를 말한다.
일반 형식
데이터형 포인터 배열명[원소의 수] ;
예) char *name[4] ;
즉, name[0], name[1], name[2], name[3]의 네가지 char형 포인터 배열이 준비된다.
포인터 배열의 문자열 데이터 초기화 방법은 다음과 같다.
static char *name[4] = {"C", "Fortran", "Basic", "Coblo"} ;
각 문자열의 두 번째 문자가 '0'인 문자열을 화면상에 나타내는 프로그램을 생각해 보자.
#include
main()
{
static char *name[4] = {"C", "Fortran", "Basic", "Cobol"} ;
int i;
for(i=0; i<4; i++)
{
if (*(name[i] + 1) == 'o')
printf("
}
}
[ 문제 1 ] 포인터 배열을 사용하여 단어를 정렬하는 프로그램을 아래의 내용에 덧붙여서 작성하시오.
#include
#include
char *tb1[] = {"Sunday", "Monday",
"Tuesday", "Wednesday",
"Thursday", "Friday",
"Saturday"
} ;
【힌 트】 strcmp(str1, str2)는 문자열의 비교하여 그 대소 판단 결과를 돌려준다.
리턴 값
양 : str1 > str2
0 : str1 = str2
음 : str1 < str2
strcpy(str1, str2) 함수는 str2에 있는 문자열을 str1에 복사한다.
[문제2] SUN, MON, ...., SAT를 화면에 차례로 표시하고, 대응하는 모든 첫 자가 입력되면
철자를 확인하여 바르면 .OK, 틀리면 NG를 출력하는 프로그램을 작성하시오.
예)
SUN : Sunday
OK
SUN : Sonday
NG
6.4 이차원 배열과 포인터 배열의 관계
int data [2] [3] ;
data는 data[0] [0]의 주소를 나타내는 상수이다.
data[0]도 data[0] [0]의 주소를 나타내는 상수이다.
.
2차원 배열과 배열의 포인터는 비슷하지만, 실제 메모리 상의 주소는 다르다.
그림으로 2차원 배열과 배열의 포인터에 대한 차이와 의미를 알아보자.
char a[2] [5] ;
char *p[2] ;
[ 예제 6-6.C ]
#include
char a[2] [5] = {"Test", "End"} ;
char *p[2] = {"Test", "End"} ;
main()
{
printf("a가 가리키는 문자열 =>
printf("a[0]이 가리키는 문자열 =>
printf("*a가 가리키는 문자열 =>
printf("a[1]이 가리키는 문자열 =>
printf("*p가 가리키는 문자열 =>
printf("p[0]이가리키는 문자열 =>
printf("p[1]이 가리키는 문자열 =>
}
4 이중 포인터
char **str ;
변수 str은 char형의 데이터 값을 가리키는 포인터의 포인터로서 선언됨을 의미 한다.
포인터의 포인터는 포인터 배열고 유사하게 사용되지만, 실제 메모리상의 구조는 다르다.
char *a[10] ; => 포인터용으로 10개의 장소가 확보
char **a ; => 포인터용으로 1개의 장소가 확보
아래의 그로그램에서 일반 변수, 포인터 변수, 포인터의 포인터 변수들의 관계를 알아보자.
[ 예제 6-7.C ]
#include
main()
{
int a, *p, **q ;
a=15 ;
p=&a ;
q=&p ;
printf("a =
printf("변수 a의 주소 = %x\n", &a) ;
printf("**q의 값 =
}
[ 예제 6-8.C ]
#include
main()
{
char *a[2], **p ;
a[0] = "DONG", a[1] = "JU" ;
printf("\n
printf("\n
p = a ;
printf("\n
printf("\n
printf("\n%c %c %c
}
[문제1] 아래의 그림과 내용을 보고 물음에 답하시오.
포인터의 포인터 P가 취해져서 내용이 1000 이 Set 되었다고 가정하자.
1. &p는 몇 번지인가?
2. *p의 값은 얼마인가?
3. &(*p)는 몇 번지인가?
4. **p의 값은 얼마인가?
5. &(**p)는 몇 번지인가?
  • 가격3,500
  • 페이지수11페이지
  • 등록일2008.01.06
  • 저작시기2007.12
  • 파일형식한글(hwp)
  • 자료번호#445996
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니