II 2008 1023 http www ns kogakuin ac











![&演算子 void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); &演算子 void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4]));](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-12.jpg)
![&演算子 void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); &演算子 void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4]));](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-13.jpg)




















![配列とアドレス(ポインタ) void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); 配列とアドレス(ポインタ) void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4]));](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-34.jpg)
![配列とアドレス(ポインタ) void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); 配列とアドレス(ポインタ) void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4]));](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-35.jpg)


![ポインタ演算 char ch[10]; char *p; p = ch; printf("%pn", p); p++; printf("%pn", p); 実行結果 ポインタ演算 char ch[10]; char *p; p = ch; printf("%pn", p); p++; printf("%pn", p); 実行結果](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-38.jpg)



























![void main(){ 練習 1 int i[2], *j; i[0]=3; i[1]=7; j=i; j++; printf("%dn", *j); } void main(){ 練習 1 int i[2], *j; i[0]=3; i[1]=7; j=i; j++; printf("%dn", *j); }](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-66.jpg)
![void main(){ 練習 2 int i[2], *j; i[0]=3; i[1]=7; j=i; (*j)++; printf("%dn", *j); } void main(){ 練習 2 int i[2], *j; i[0]=3; i[1]=7; j=i; (*j)++; printf("%dn", *j); }](https://slidetodoc.com/presentation_image_h2/7ee80d5510e09f97ea4c70182d05971d/image-67.jpg)















- Slides: 82
プログラミング論 II 2008年 10月23日 ポインタ http: //www. ns. kogakuin. ac. jp/~ct 13140/Prog. 2008/
&演算子 void main(){ char abc, def, ghi; printf("アドレスは%p %p %pです.n", &abc, &def, &ghi); } 実行結果 アドレスは 0013 FF 7 C 0013 FF 78 0013 FF 74です. 11
&演算子 void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); } 実行結果 アドレスは 0013 FF 78 0013 FF 79 0013 FF 7 A 0013 FF 7 B 0013 FF 7 Cです. 12
&演算子 void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); } int型は 4バイト 実行結果 アドレスは 0013 FF 6 C 0013 FF 70 0013 FF 74 0013 FF 78 0013 FF 7 Cです. 13
配列とアドレス(ポインタ) void main(){ char abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); } 実行結果 アドレスは 0013 FF 78 0013 FF 79 0013 FF 7 A 0013 FF 7 B 0013 FF 7 Cです. 34
配列とアドレス(ポインタ) void main(){ int abc[5]; printf("アドレスは%p %pn%p %p %pです.n", &(abc[0]), &(abc[1]), &(abc[2]), &(abc[3]), &(abc[4])); } 実行結果 アドレスは 0013 FF 6 C 0013 FF 70 0013 FF 74 0013 FF 78 0013 FF 7 Cです. 35
ポインタ演算 char ch[10]; char *p; p = ch; printf("%pn", p); p++; printf("%pn", p); 実行結果 0013 FF 74 0013 FF 75 38
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 100 番地 3 53
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 100 番地 3 54
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 実行結果 3 100 番地 3 57
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } x px 100 番地 104 番地 3 59
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } x px 100 番地 104 番地 3 100 番地 60
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } x px 100 番地 104 番地 3 100 番地 61
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } x px p 100 番地 104 番地 108 番地 3 100 番地 番地 62
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } x px p 100 番地 104 番地 108 番地 7 100 番地 番地 63
関数の仮引数と実引数(参照渡し) void func(int *p){ *p = 7; } void main(){ int x = 3; int *px; px = &x; func(px); printf("%dn", x); } 実行結果 7 x px 100 番地 104 番地 7 100 番地 64
void main(){ 練習 0 int i, *j, k; i = 3; j = &i; k = i; *j = 4; k = 5; printf("i=%dn", i); } 65
void main(){ 練習 1 int i[2], *j; i[0]=3; i[1]=7; j=i; j++; printf("%dn", *j); } 66
void main(){ 練習 2 int i[2], *j; i[0]=3; i[1]=7; j=i; (*j)++; printf("%dn", *j); } 67
応用例: 値を 2個返す関数 C言語では,戻り値は 1個しか用意できない. void sq_cu(int n, int *ps, int *pc){ *ps = n*n; *pc = n*n*n; squareが100番地, } cubeが104番地で void main(){ あったとする. int square, cube; sq_cu(3, &square, &cube); printf("%d %dn", square, cube); } 76
応用例: 値を 2個返す関数 C言語では,戻り値は 1個しか用意できない. void sq_cu(int n, int *ps, int *pc){ *ps = n*n; nが3, *pc = n*n*n; psが100番地, pcが104番地として } 関数sq_cuを開始. void main(){ int square, cube; sq_cu(3, &square, &cube); printf("%d %dn", square, cube); } squareが100番地, cubeが104番地であったとする. 78
応用例: 値を 2個返す関数 C言語では,戻り値は 1個しか用意できない. void sq_cu(int n, int *ps, int *pc){ *ps = n*n; 実行結果 *pc = n*n*n; 9 27 } void main(){ int square, cube; sq_cu(3, &square, &cube); printf("%d %dn", square, cube); } squareが100番地, cubeが104番地であったとする. 81