코딩/C언어

수업021_포인터 ~ 수업021_포인터07 , 문제021_포인터 ~ 문제021_포인터04(1~3)

tree0505 2025. 7. 3. 11:49
반응형
    • _21_교재

  • 수업021_포인터.cpp
    • 변수의 3요소 
      • 이름 
      • 값 
      • 주소 
        • 메모리. 1바이트에 대한 고유번호 
        • 다른 언어는 안 되는데. c언어는 주소를 출력해서 볼 수 있다.
        • 고유넘버를 볼려면 &를 붙이면 된다. 
#include <stdio.h>

int main(void) {

	int a = 10;
	printf("%d \n", a); //값 
	//printf("%d \n", &a); // 10진수로 표현 //고유번호
	//d은 에러남. d 는 10진수  
	printf("%p \n", &a); // 16진수로 표현
	//고유번호 0x......
	//0x => 16진수라는 뜻 
	return 0;


	//문제 
	//int는 4바이트 
	//그러면 1번의 주소만 나온다. 나머지 3개는 무시 
}

  • 수업021_포인터02.cpp
    • 주소를 왜 저장하는가? 
      • ex) 엄청난 큰 배열이 있다. 
      • 코딩을 하다보면. 함수에서 함수로 자료를 넘겨준다. 그래야 코딩이 원활해진다. 
      • main에다가 다 작성할 수가 없다. 
      • 필현적으로 자료를 넘겨야 하는데.
      • 자료를 넘길때마다 자료를 다 복사하는게. 쓸데 없는 짓인거다.  
      • 그러면 엄청난 배열이 있으면. 그 메모리의 주소만 넘기는 거다. 
      • 주소를 알고 있기 때문에. 배열을 접근할 수 있는거다. 
#include <stdio.h>

int main(void) {
	// 포인터변수 (일반변수의 주소를 저장할수있다.)
	int* p = 0; //포인터 변수. 값을 저장하는게 아니라. 주소를 저장 
	int n = 10;

	//p = 10; //이게 안된다. 
	p = &n; //이렇게 저장해야 한다. 

	//주소는 왜 저장하는가? 

	/*
		포인터변수의 기능
		*p ==> 저장된주소가있으면 주소로이동해 값을 출력한다.
	*/

	printf("%d %d\n", *p , n); // 값출력
	//주소를 접근할 떄는 *p 이다.
	printf("%d %d\n", p, &n);  // 주소출력

	return 0;
}

  • 수업021_포인터03.cpp

#include <stdio.h>

int main(void) {
	
	int* p = 0; //주소를 저장하는 변수 
	int n = 10;
	p = &n; //주소를 준것 

	n += 1; //n = 11 
	
	printf("%d \n", *p); 
	//*p => p로 가서 그 값을 출력해라. //11 

	*p += 1;
	//p로 가서 그 값에 +1해라. 
	//n = 12 

	printf("%d \n", n); //12 

	printf("%d \n", (*p)++);
	//화면 12, n = 13 

	printf("%d \n", n); // 13 

	return 0;
}

  • 수업021_포인터04.cpp

#include <stdio.h>

int main(void) {

	int* p = 0;
	int n = 10;
	p = &n;

	printf("%p\n", &n); //x 
	printf("%p\n", p);	//x
	printf("%p\n", *&p); //x
	//p의 주소의 값을 출력 
	printf("%p\n", &p); //y 


	return 0;
}

  • 수업021_포인터05.cpp
#include <stdio.h>

int main(void) {

	char c; // 1
	int n;  // 4
	double d; // 8
	printf("%ld %ld %ld \n\n\n", sizeof(c), sizeof(n), sizeof(d));
	
	//포인터 변수는 사이즈가 전부 8이다. 
	//자료형과 상관 없다. 
	char* cpt;
	int* npt;
	double* dpt;

	printf("%ld %ld %ld  \n\n\n", sizeof(cpt), sizeof(npt), sizeof(dpt));
	return 0;
}

  • _21_문제

  • 문제021_포인터.cpp

#include <stdio.h>

int main(void) {

	int A = 10, B; //A = 10, B 
	int* C = &B;	//C = 
	B = A--;
	B += 20;
	printf("%d", *C); //30 

	return 0;
}

  • 문제021_포인터02.cpp

#include <stdio.h>

int main(void) {

	int code = 65;
	int* p = &code;

	// c로 출력 -65하면 된다 ABC.....abc.....
	printf("%c", (*p)++);
	//C로  출력은 65 => 대문자 A이다. 

	return 0;
}

  • 문제021_포인터03.cpp

#include <stdio.h>

int main(void) {

	int n = 4;
	int* pt = NULL;
	//NULL은 C언어로 0이다. 
	pt = &n;

	printf("%d", &n + *pt - *&pt + n);

	return 0;
}

  • 문제021_포인터04.cpp
#include <stdio.h>

int main(void) {
	
	// scanf_s 에 90이 입렸됬다고 가정하면 90 20 90이 출력된다. 
	int i = 10;
	int j = 20;
	int* k = &i;
	scanf("%d", k);
	printf("%d %d %d\n", i, j, *k);

	return 0;
}
반응형