#include <stdio.h>
int main(void){
int a = 10;
int *pi, **ppi;
pi = &a, ppi = π
printf("----------------------------------------------\n");
printf("변수 변숫값 &연산 *연산 **연산\n");
printf("----------------------------------------------\n");
printf(" a%10d%10%10u\n", a, &a);
printf(" pi%10u%10u%10d\n",pi, &pi, *pi);
}
### 코드 설명
이 프로그램은 변수, 포인터, 이중 포인터의 개념을 설명하기 위해 작성되었습니다. 변수 `a`, 포인터 `pi`, 그리고 이중 포인터 `ppi`를 사용하여 각각의 값을, 주소, 그리고 간접 참조를 통한 값에 접근하는 방법을 보여줍니다.
int a = 10; // 정수형 변수 a를 선언하고 10으로 초기화합니다.
int *pi, **ppi; // 정수형 포인터 pi와 이중 포인터 ppi를 선언합니다.
pi = &a, ppi = π // pi에는 a의 주소를, ppi에는 pi의 주소를 할당합니다.
### 출력 설명
- `printf("변수 변숫값 &연산 *연산 **연산\n");`를 통해 테이블의 헤더를 출력합니다. 여기서 각 열은 변수의 이름, 변수의 값, 변수의 주소(& 연산), 포인터가 가리키는 값(* 연산), 그리고 이중 포인터가 가리키는 값(** 연산)을 의미합니다.
- `printf(" a%10d%10%10u\n", a, &a);`와 `printf(" pi%10u%10u%10d\n",pi, &pi, *pi);`는 각각 변수 `a`와 포인터 `pi`의 정보를 출력하려고 시도합니다. 그러나 이 코드는 몇 가지 문제가 있습니다:
1. `%10%10u`와 같은 부분은 올바른 형식 지정자가 아닙니다. 아마도 주소를 출력하려는 의도였을 텐데, 주소를 출력하기 위해서는 `%p` 형식 지정자를 사용해야 하고, 해당 변수 앞에 `(void *)` 캐스팅이 필요합니다.
2. 이중 포인터 `ppi`에 대한 출력이 누락되었습니다. 이중 포인터는 `**연산`을 통해 변수 `a`의 값을 간접적으로 접근할 수 있게 해줍니다.
올바르게 수정된 코드의 출력 부분은 다음과 같아야 합니다:
printf(" a%14d%14p\n", a, (void*)&a);
printf(" pi%16p%14p%11d\n", (void*)pi, (void*)&pi, *pi);
printf(" ppi%14p%14p%13d\n", (void*)ppi, (void*)&ppi, **ppi);
이 출력은 각 변수, 포인터, 이중 포인터의 값을, 주소, 그리고 간접 참조 값을 명확하게 보여줍니다. `*연산`은 포인터가 가리키는 값에 접근할 때 사용되고, `**연산`은 이중 포인터가 가리키는 값을 접근할 때 사용됩니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 15) 함수 포인터를 사용한 함수 호출 (0) | 2024.09.17 |
---|---|
chapter 15) void 포인터 사용 (0) | 2024.09.16 |
chapter 15) 포인터 배열의 값을 출력하는 함수 (0) | 2024.09.14 |
chapter 15) 주소로 쓰이는 배열명과 배열의 주소 비교 (0) | 2024.09.13 |
chapter 15) 이중 포인터를 사용한 포인터 교환 (0) | 2024.09.12 |