C언어 포인터에 대한 정리
C언어반응형
(까먹을까봐 기록하는 C언어 포인터)
포인터는 메모리에 직접 접근이 가능하게 합니다.
포인터 변수는 주솟값을 저장하고 있습니다.
포인터
#include <stdio.h>
int main (){
int num =10; //정수 선언
int *p; //포인터 선언
p = # //포인터 p에 num의 주소 저장
printf ("num:%d\n",num); //num출력
printf ("&num:%d\n",&num); //num의 주소 출력
printf ("p:%d\n",p); //p가 가지고 있는값 즉 num의 주소 출력
printf ("*p:%d\n",*p); // *p가 가르키는 값 즉 num에 들어 있는 값
printf ("&p:%d\n",&p); //포인터 p가 저장되어 있는 값
}
실행 결과
num:10
&num:6487580
p:6487580
*p:10
&p:6487568
#include <stdio.h>
int main (){
char *p;
p = "hello world";
printf ("%d\n",p);
printf ("%c\n",*p);
printf ("%d\n",&p);
}
실행 결과
4210688
h
6487576
함수의 포인터
#include <stdio.h>
int add (int a, int b){
return a+b;
}
int main (){
int (*p)(int,int); //포인터형식으로 함수 선언
p = add; //선언된 방식으로 이미 만들어둔 함수 지정
printf ("%d\n",p(3,4)); //p에 저장된 함수로 실행
printf ("%d\n",&p); //p의 주소
printf ("%d\n",add(3,4)); // 그냥 add를 바로 불러 실행
printf ("%d\n",p); //p에 저장된 값 (add의 주소)
printf ("%d",&add); //add의 주소
}
실행결과
7
6487576
7
4199728
4199728
#include <stdio.h>
void fun (){
printf ("Hello world!\n");
}
int main (){
void (*p)();
p = fun;
p(); //p에 저장된 fun 실행
(*p)(); //p가 가르키는 fun 실행
fun(); //fun실행
}
배열의 포인터
#include <stdio.h>
int main (){
int arr [4] ={1,2,3,4};
int *p;
p = arr;
printf ("%d\n",p);
printf ("%d\n",&arr[0]); //p가 가르키는 것은 배열의 첫번째 주소
printf ("%d\n",*p); //p가 가르키는 arr[0]이 가지고 있는 값 1 출력
printf ("%d\n",p+1);
printf ("%d\n",&arr[1]); //p+1을 할 경우 배열 다음 칸의 주소를 카르킴
printf ("%d\n",*p+1);
}
실행결과
6487552
6487552
1
6487556
6487556
2
#include <stdio.h>
int main (){
char *arr[3]; //char 자료형을 가르킬 수 있는 포인터들의 배열 선언
arr [0] = "Hello"; //arr[0] 포인터가 가르키는 문자열
arr [1] = "World"; //arr[1] 포인터가 가르키는 문자열
arr[2] ="OH!!"; //arr[2] 포인터가 가르키는 문자열
printf ("%d\n",arr[0]); //배열에 저장된 주소
printf ("%c\n\n",*arr[0]); // 주소가 가르키는 문자열의 첫번째 글자
printf ("%d\n",arr[1]);
printf ("%c\n\n",*arr[1]);
printf ("%d\n",arr[2]);
printf ("%c\n\n",*arr[2]);
printf ("%d\n",arr[0]+1);
printf ("%c\n\n",*(arr[0]+1)); //arr[0]이 가르키는 문자열의 두번째 글자
printf ("%d\n",arr[0]+2);
printf ("%c\n\n",*(arr[0]+2)); //arr[0]이 가르키는 문자열의 세번째 글자
}
실행 결과
4210688
H
4210694
W
4210700
O
4210689
e
4210690
l
#include <stdio.h>
int main (){
char *arr[6] = {"a","d","g","j","n"};
printf ("%d\n",arr[0]);
printf ("%c\n",*arr[0]);
printf ("%d\n",arr[0]+1); //그냥 arr[0]의 주소값에서 +1 된것
printf ("%d\n",arr[1]);
printf ("%c\n",*arr[0]+1); //a(97) +1 = b (98)
printf ("%c\n",*arr[1]);
printf ("%d\n",arr[0]+2); //그냥 arr[0]의 주소값에서 +2 된것
printf ("%d\n",arr[2]);
printf ("%c\n",*arr[0]+2); //a(97) +2 = c (99)
printf ("%c\n",*(arr[0]+2)); //하지만 이에 해당하는 주소를 가지고 있다면 그 값이 출력됨
printf ("%c\n",*arr[2]);
}
실행 결과
4210688
a
4210689
4210690
b
d
4210690
4210692
c
d
g
반응형
'C언어' 카테고리의 다른 글
C언어로 가위바위보 게임 만들기 (0) | 2025.04.06 |
---|---|
C언어로 업다운 게임 만들기 (0) | 2019.10.06 |