-
1. 포인터란? - 주소값을 저장하는 변수
포인터란 메모리의 번지 주소이다.
포인터 변수는 메모리의 주소를 가지는 변수이다.
포인터 변수의 크기는 4byte의 부호없는 정수형이다.
포인터는 첫번째 바이트의 주소값만 저장
포인터 변수 출력은 %p를 이용
포인터 연산자
&는 변수의 메모리 주소를 출력하는 연산자이다.
*는 주소를 이용하여 변수값을 접근하는 연산자이다.
간접참조 연산자(역 참조 연산자)
* : 피연산자의 메모리에 접근하라는 뜻
즉 메모리에 접근해서 주소값을 저장해 가는 변수! 변수처럼 값을 저장하기 위한것!
int *p // 메모리에 접근가능한 변수가 됨
p = &num //포인터가 변수 num 주소값을 저장함
*p = 123 // 변수 num에 123을 대입
int *ptr1 = &num1 // 선언과 동시에 초기화
char *ptr2 = &num2 // 선언과 동시에 초기화
double *ptr3 = &num3 // 선언과 동시에 초기화
- 포인터형으로 데이터를 출력할때 서식문자 %p를 통해 주소값을 쉽게 표현 할 수있다.printf("num1의 저장위치 : %p \n",ptr1);printf("num2의 저장위치 : %p \n",ptr2);printf("num3의 저장위치 : %p \n",ptr3);- %#x 는 맨 앞에 0x로 출력, %p 로 하면 맨앞에 00으로 출력되여 결과가 약간 다름Call by Reference
포인터에서 캐스팅 연산자 ()
int i;
double *ptr = &i; // int형 변수의 주소값을 double형 포인터가 저장하는데, &i 주소값이 더블형으로 변환
이럴때 강제형 변환은 캐스팅 연산자 () 를 이용
int i;
double *ptr = (double *)&i;
포인터 연산
1. *ptr++
=> 순서 ① * 간접참조를 한다.
② ++ 후위 증가를 한다.
#include<stdio.h>
int main() {
int arr[] = {10,20,30,40,50};
int arrlen = sizeof(arr) / sizeof(int);
int i, *ptr;
ptr = arr;
for (i = 0; i < arrlen; i++)
printf("%d \n", *ptr++);
getch();
return 0;
}
결과
10
20
30
40
50
#include<stdio.h>
int main() {
int arr[] = {10,20,30,40,50};
int *ptr = arr;
int sum = 0;
while (*ptr)
sum += *ptr++;
printf("배열 arr 요소들의 합 : %d ", sum);
getch();
return 0;
}
결과
#include <stdio.h>
int main(void) { int a = 100; char b = 'M'; double d = 1.34; int* ap = &a; // ap = &b; 경고 발생 puts(" \n void 포인터(pointer) \n"); printf(" a = %3d, &a = %d \n", a, &a ); printf(" b = %3c, &b = %d \n", b, &b ); printf(" d = %.1f, &d = %d \n", d, &d ); printf(" *ap = %3d, ap = %d, &ap = %d \n\n", *ap, ap, &ap); return 0; }[출처] void pointer(포인터)|작성자 양주종
결과
a=100, &a=6487724
b= M, &b=6487728
d=1.3, &c=6487732
*ap=100, ap=6487724, &ap=6487708
'c언어 기초 ' 카테고리의 다른 글
file 입출력 - 단어찾기 (0) 2017.04.21 scanf 숫자이외의 입력이 있으면 다시 입력받게 (0) 2017.04.18 1차원 배열 (0) 2017.03.30 재귀 함수 (0) 2017.03.28 함수의 정의와 선언 (0) 2017.03.28