ポインタへのポインタ
わすれるわぁ、ってことでボケ防止
[hirasawa@ubuntu1204-20 ~]$ cat point2.c #include <stdio.h> void main(void) { char *mnthp[3] = { /* mnthp[3] is(are) pointers of char */ "1", "123456789abcde", "12345" }; char **p1, **p2, **p3; /* p1 is pointer to pointer of char */ int i, j; p1 = p2 = p3 = mnthp; /* p1 = p2 = p3 = &mnthp[0] */ for(i=0;i<3;i++) { printf("add of mnthp[%d] is %p\n",i,&mnthp[i]); printf("contents of mnthp[%d] is %p\n",i,mnthp[i]); } /***** 例1 *****/ for (i = 0; i < 3; i++) { printf("%s\n", *(p1 + i)); /* 相対的に文字列を出力 */ printf("%p-\n", (p1 + i)); /* 相対的に文字列を出力 */ } /***** 例2 *****/ for (i = 0; i < 3; i++) { /* 「ポインタのポインタ」の値そのものを */ printf("%s\n", *p2); /* 更新して絶対的に文字列を出力 */ printf("%p--\n", p2); /* 更新して絶対的に文字列を出力 */ ++p2; } /***** 例3 *****/ for (i = 0; i < 3; i++) { j = 0; while(*(*p3 + j) != '\0') { /* 「ポインタのポインタ」を使って、*/ printf("%c-", *(*p3 + j)); /* 1文字ずつ出力する */ printf("%p\n", (*p3 + j)); /* 1文字ずつ出力する */ j++; } printf("\n"); ++p3; } } [hirasawa@ubuntu1204-20 ~]$ ./point2 add of mnthp[0] is 0x7fff8a522e40 contents of mnthp[0] is 0x40083c add of mnthp[1] is 0x7fff8a522e48 contents of mnthp[1] is 0x40083e add of mnthp[2] is 0x7fff8a522e50 contents of mnthp[2] is 0x40084d 1 0x7fff8a522e40- 123456789abcde 0x7fff8a522e48- 12345 0x7fff8a522e50- 1 0x7fff8a522e40-- 123456789abcde 0x7fff8a522e48-- 12345 0x7fff8a522e50-- 1-0x40083c 1-0x40083e 2-0x40083f 3-0x400840 4-0x400841 5-0x400842 6-0x400843 7-0x400844 8-0x400845 9-0x400846 a-0x400847 b-0x400848 c-0x400849 d-0x40084a e-0x40084b 1-0x40084d 2-0x40084e 3-0x40084f 4-0x400850 5-0x400851 [hirasawa@ubuntu1204-20 ~]$
もういっちょ!って適当にでっちあげてみたけど、全然意味がなかったw
ま いいか
[hirasawa@ubuntu1204-20 ~]$ cat point3.c #include <stdio.h> void main(void) { int * intp; int ** intpp; int a[10]; int i; for(i=0;i<10;i++) { a[i]=i; printf("%d",a[i]); } printf("\n"); intp = a; for(i=0;i<10;i++) { printf("%d",*intp); intp++; } printf("\n"); intp = a; //printf("%p\n",intp); intpp = &intp; for(i=0;i<10;i++) { printf("%d",**intpp); intp++; } printf("\n"); } [hirasawa@ubuntu1204-20 ~]$ [hirasawa@ubuntu1204-20 ~]$ cat point3.c #include <stdio.h> void main(void) { int * intp; int ** intpp; int a[10]; int i; for(i=0;i<10;i++) { a[i]=i; printf("%d",a[i]); } printf("\n"); intp = a; for(i=0;i<10;i++) { printf("%d",*intp); intp++; } printf("\n"); intp = a; //printf("%p\n",intp); intpp = &intp; for(i=0;i<10;i++) { printf("%d",**intpp); intp++; } printf("\n"); } [hirasawa@ubuntu1204-20 ~]$ ./point3 0123456789 0123456789 0123456789 [hirasawa@ubuntu1204-20 ~]$
もういっちょ でっちあげてみたけど、
やはり意味がない
ただのポインターになっちまったい
んー、結局stringぐらいしかつかわないってこと?
よくわかんなくなってきたゾ orz
[hirasawa@ubuntu1204-20 ~]$ cat point3.c #include <stdio.h> void main(void) { int x=3; int y=3; int inta[x][y]; int *intp; int i,j; for(i=0;i<x;i++) { for(j=0;j<y;j++) { inta[i][j]=i+j; printf("%d",inta[i][j]); } } printf("\n"); intp = inta; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",*intp); intp++; } } printf("\n"); } [hirasawa@ubuntu1204-20 ~]$ ./point3 012123234 012123234 [hirasawa@ubuntu1204-20 ~]$