C 포인터

ChoRong0824·2022년 9월 20일
0

C

목록 보기
1/17

예제 9-1

#include <stdio.h>
int main()
{
	int a;
    	a= 5; 
        	printf("변수의 값은 %d\n", a);
            printf("변수 a의 주소는 %d\n",&a);
            //주소 출력과  값 출력의 차이 생각해보기
}

포인터

int*p :정수형 포인터 선언
char*p : 문자형 포인터 선언
(a의 주소, p의 주소, p의 값)
"%p",p; // 이러면 바깥 p가 안쪽 따음표 p에 들어가는 느낌 (대입)

예제 9-4


실습


//p 부분에 a를 추가한다면? , 직접참조 사용에서 마지막에 오는 a대신 p를 쓴다면??

문자열 출력

#include <stdio.h>

int main() {
  //문자열 출력
    char *p = "abcd"; //문자열을 포인터로 지정
   	
    printf("%s",p); //포인터 변수 p를 넘기고 화면에 "abcd" 출력
}
//	p++해서 printf(%s) 하면 ?


-> 객체단위이기 때문에, ++를 하게되면 출력 값이 abcd가 아닌 bcd가 확인
(문자열 처리에 많이 사용되기도 함)

포인터 배열 사용

char*p[] ={"abcd,"efg"};

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

  char *p[] = {"abcd","efg"}; // 문자열로의 포인터 배열 선언
  int i;

  for(i=0;i<2;i++){
    printf(p[i]); //i 번째의 문자열 "abcd"와 "efg"를 출력
    //위의 출력 문구는 printf("%s",p[i]);로 수정 가능 (문자열일 경우)
    printf("\n");
  }
}

포인터와 배열 9-7, 1차원 배열로 포인터 할당

  • p=a; 반복의 초기값으로 배열(a)의 첫 번째 요소의 주소를 p에 저장하였다. 따라서 p는 b1f800을 가리키며 *p는 1이다.

포인터의 포인터 9-10

#include <stdio.h>

int main() {

  int num;
  int *p1;
  int **p2;
  
  printf("정수를 입력하세여 : ");
  scanf("%d",&num);

  p1 = &num;
  p2 = &p1;
  printf ("num의 주소: %u\n",&num);
  printf ("p1의 주소: %u\n",&p1);
  printf ("p2의 주소: %u\n",&p2);
  printf ("num의 주소: %d\n",num);
  printf ("p1의 값: %u\n",p1);
  printf ("p2의 값: %u\n",p2);
  printf ("p1의 값: %d\n",*p1);
  printf ("p2의 값: %u\n",*p2);
  printf ("**p2의 값: %d\n",**p2);
}
  • 참고로, scnaf의 sdl을 설정해줘야함 .

간접 참조

  • 포인터 변수 앞에 * 를 붙여 실제 값에 접근하는 것이고,
    포인터 변수가 가진 '값'인 주소값에 접근하며, 해당 주소에 존재하는 '값'에 다시 접근 하므로 간접 참조라 한다.
  • * : 간접 참조 연산자 (포인터) == 역참조라고도 한다.
  • C++의 구조체를 간접참조할 경우 구조체의 멤버변수/함수를 접근할 때 . 를 사용함

직접 참조

  • 포인터 변수가 아닌 실제 값을 가진 변수를 직접 사용하는 것이며,
    C++의 구조체를 직접참조할 경우 구조체의 멤버변수/함수를 접근할 때 -> 를 사용함
profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글