06주차 - Donghwanteam/C2-10 GitHub Wiki

[과제]

[포인터]

포인터의 정의

포인터(Pointer) 는 메모리 주소를 저장하는 변수이다. 즉, 일반 변수는 값을 저장하는 반면, 포인터는 **어떤 값이 저장된 메모리의 위치(주소)**를 저장한다.

[예시]

#include <stdio.h>

int main() {
    int num = 5;
    int *ptr = &num;

    printf("num의 값: %d\n", num);
    printf("ptr이 가리키는 값: %d\n", *ptr); // 역참조
    printf("ptr 자체의 값 (num의 주소): %p\n", ptr);

    return 0;
}

[수업내용참고]

포인터: 메모리 주소를 저장하는 변수

일반 변수 -> 값 저장

포인터 -> 값이 저장된 주소 저장

주소->변수 (*) 변수->주소 (&)

int n = 10;       // 일반 변수
int *k = &n;      // 포인터 변수, 변수 a의 주소를 저장

printf("%d %d\n", n, *k);

포인터 그림

  • *p는 "p가 가리키는 곳의 값"을 의미
  • &a는 "a의 주소"를 의미

포인터 기본 문법

포인터 선언

int *p;       // int형 데이터를 가리키는 포인터
char *cp;     // char형 데이터를 가리키는 포인터
float *fp;    // float형 데이터를 가리키는 포인터

주소 연산자 &

int a = 5;
int *p = &a;   // a의 주소를 p에 저장

간접 참조 연산자( * )

*p = 20;       // p가 가리키는 주소에 있는 값을 20으로 설정

이중 포인터 (Pointer to Pointer)

포인터를 가리키는 포인터도 가능합니다.

int n = 10;
int *p = &a;
int **pp = &p;

printf("%d\n", **pp);  // 10 출력

[실습]

[기본 코드]

#include <stdio.h>
int main() {

	int n = 10;

	printf("data : %d\n", n);
}

[코드1]

#include <stdio.h>
int Increment(int k)
{
	return 11;
}
int main() {

	int n = 10;

	printf("data : %d\n", n);
	n = Increment(n); //++n;
	printf("data : %d\n", n);
}
#include <stdio.h>
int Increment(int k)
{
	return k+1;
}
int main() {

	int n = 10;

	printf("data : %d\n", n);
	n = Increment(n); //++n;
	printf("data : %d\n", n);
	n = Increment(n); //++n;
	printf("data : %d\n", n);
	n = Increment(n); //++n;
	printf("data : %d\n", n);
}

[코드2]

#include <stdio.h>
void PrintA() {
	printf("PrintA()\n");
}
void PrintB() {
	printf("PrintB()\n");
}
void PrintC() {
	printf("PrintC()\n");
}
int main() {
	PrintA();
	PrintC();
	PrintB();
}
#include <stdio.h>
void PrintA() {
	printf("PrintA()\n");
}
void PrintB() {
	PrintA();
	printf("PrintB()\n");
}
void PrintC() {
	PrintB();
	printf("PrintC()\n");
}
int main() {
	PrintA();
	PrintB();
	PrintC();
}

[코드3]

#include <stdio.h>
int main() {
	int n = 10;
	int k = n;

	n = 100;

	printf("%d %d\n", n, k);
	//return 0;
	
}
#include <stdio.h>
int main() {
	int n = 10;
	int* k = &n;

	n = 100;

	printf("%d %d\n", n, *k);
	printf("%d %d\n", &n, k);
	//return 0;

}

&(앰퍼샌드) *(에스테리크)

#include <stdio.h>
int main() {
	char c = 10;
	double d = 5.6;

	char* p1 = &c;
	double* p2 = &d;

	printf("%d %g\n", c, d);
	printf("%p %p\n", p1, p2);
	printf("%p %p\n", &c, &d);
}
#include <stdio.h>
int main() {
	char c = 10;
	double d = 5.6;

	char* p1 = &c;
	double* p2 = &d;

	printf("%d %g\n", c, d);
	printf("%d %g\n", *p1, *p2);
	printf("%d %g\n", *&c, *&d);
}
#include <stdio.h>
int main() {
	int n = 10;
	int* p = &n;
	int** pp = &p;

	printf("%d %d %d\n", n, *p,**pp);
	printf("%p %p %p\n", &n,&*p, &**pp);
	printf("%p %p %p\n", &n, p, *pp);
}
#include <stdio.h>
int main() {
	double d;
	double d2 = 7.77;
	double* pd;
	double** ppd;

	d = 5.55;
	pd = &d2;
	ppd = &pd;

	printf("%g %g %g\n", d, *pd, **ppd);
}
#include <stdio.h>
int main() {
	int n = 10;
	int n2 = n;
	int* p = &n;
	int* p2 = p;

	printf("%d %d\n", n, *p);
	printf("%p %p\n", &n, &*p);
	printf("%p %p\n", &n, p);
}
#include <stdio.h>
int main() {
	int n = 10;
	int n2 = n;
	int* p = &n;
	int* p2 = p;

	*p2 = 20;
	printf("%d %d %d\n", n, *p, *p2);
}
⚠️ **GitHub.com Fallback** ⚠️