int a[2][7];
int *p[2];
p[0]=*a; <-- p[0] = a
p[1]= *(a+1); <-- p[1]=a+1
로 쓰면 2개의 포인터 p[0], p[1]이 배열 요소로서 확보 됩니다.
#include<stdio.h>
int main(void)
{
char *p[]={"byte","bit"};
int i;
for(i=0; i<2;i++){
printf(p[i]);
printf("\n");
}
}
#include<stdio.h>
int main(void)
{
char a[2][7]={{"sample"},{"test"}};
char *p[2];
p[0] = *a;
p[1] = *(a+1);
printf("%s, %s\n",p[0],p[1]);
printf("%u %u %u %u %u %u\n", p[0]+0, p[0]+1, p[0]+2, p[0]+3, p[0]+4,p[0]+5);
printf("%c %c %c %c %c %c\n", *(p[0]+0), *(p[0]+1), *(p[0]+2), *(p[0]+3), *(p[0]+4),*(p[0]+5));
printf("%u %u %u %u %u %u\n", (*a+0),*a+1,*a+2,*a+3,*a+4,*a+5);
printf("%c %c %c %c %c %c\n", *(*a+0),*(*a+1),*(*a+2),*(*a+3),*(*a+4),*(*a+5));
printf("%u %u %u %u\n", p[1]+0,p[1]+1,p[1]+2,p[1]+3);
printf("%c %c %c %c\n", *(p[1]+0),*(p[1]+1),*(p[1]+2),*(p[1]+3));
printf("%u %u %u %u %u %u\n",*(a+1)+0,*(a+1)+1,*(a+1)+2,*(a+1)+3);
printf("%c %c %c %c %c %c\n",*(*(a+1)+0),*(*(a+1)+1),*(*(a+1)+2),*(*(a+1)+3));
}
(후)
#include<stdio.h>
int main(void)
{
char a[2][7]={{"sample"},{"test"}};
char *p[2];
p[0] = *a;
p[1] = *(a+1);
printf("%s, %s\n",p[0],p[1]);
printf("%u %u %u %u %u %u\n", p[0]+0, p[0]+1, p[0]+2, p[0]+3, p[0]+4,p[0]+5);
printf("%c %c %c %c %c %c\n", *(p[0]+0), *(p[0]+1), *(p[0]+2), *(p[0]+3), *(p[0]+4),*(p[0]+5));
printf("%u %u %u %u %u %u\n", (*a+0),*a+1,*a+2,*a+3,*a+4,*a+5);
printf("%c %c %c %c %c %c\n", *(*a+0),*(*a+1),*(*a+2),*(*a+3),*(*a+4),*(*a+5));
printf("%u %u %u %u\n", p[1]+0,p[1]+1,p[1]+2,p[1]+3);
printf("%c %c %c %c\n", *(p[1]+0),*(p[1]+1),*(p[1]+2),*(p[1]+3));
printf("%u %u %u %u\n",*(a+1)+0,*(a+1)+1,*(a+1)+2,*(a+1)+3);
printf("%c %c %c %c\n",*(*(a+1)+0),*(*(a+1)+1),*(*(a+1)+2),*(*(a+1)+3));
}
위 두개 코드와 console를 비교해서 차이점을 확인하기
(해석)
데이터형 **변수명;
(예를 들어)
char*p1="sample"
char **p2;
p2= &p1;
-> char**p2 ; 로 선언하고 p2 = &p1 ; 를 수행하면 포인터 변수 p2는 포인터 변수 p1를 가리키게 되고, 이 *p2가 문자열의 시작 주소를 가리킵니다.
-> 따라서, 이 p2 를 포인터의 포인터 라고 합니다.
#include <stdio.h>
void main(void){
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));
}
데이터형 *포인터 배열 이름[배열 길이];
int *array[3];
int x=10, y=20, x=30;
int*array[3]={&x,&y,&z};
#include<stdio.h>
int main(void){
char *q[3]={"One","Two","Three"};
char **p=q;
printf("%s %s %s\n", q[0],q[1],q[2]);
printf("%s, %c %c %c\n", *p, **p, *(*p+1), *(*p+2));
**p++;
printf("%s, %c %c %c\n", *p, **p, *(*p+1), *(*p+2));
**p++;
printf("%s, %c %c %c %c %c\n", *p, **p, *(*p+1), *(*p+2), *(*p+3), *(*p+4));
}