#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에 들어가는 느낌 (대입)
//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");
}
}
p=a;
반복의 초기값으로 배열(a)의 첫 번째 요소의 주소를 p에 저장하였다. 따라서 p는 b1f800을 가리키며 *p는 1이다.#include <stdio.h>
int main() {
int num;
int *p1;
int **p2;
printf("정수를 입력하세여 : ");
scanf("%d",&num);
p1 = #
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);
}
*
: 간접 참조 연산자 (포인터) == 역참조라고도 한다.