II 2010 1014 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/069ae3179560274103f038dd38c55828/image-13.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/069ae3179560274103f038dd38c55828/image-14.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/069ae3179560274103f038dd38c55828/image-35.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/069ae3179560274103f038dd38c55828/image-36.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/069ae3179560274103f038dd38c55828/image-39.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/069ae3179560274103f038dd38c55828/image-67.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/069ae3179560274103f038dd38c55828/image-68.jpg)

















![練習 4 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d 練習 4 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d](https://slidetodoc.com/presentation_image_h2/069ae3179560274103f038dd38c55828/image-86.jpg)
![練習 5 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d 練習 5 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d](https://slidetodoc.com/presentation_image_h2/069ae3179560274103f038dd38c55828/image-87.jpg)
- Slides: 87

プログラミング論 II 2010年 10月14日 ポインタ http: //www. ns. kogakuin. ac. jp/~ct 13140/Prog. 2010/











&演算子 void main(){ char abc, def, ghi; printf("アドレスは%p %p %pです.n", &abc, &def, &ghi); } 実行結果 アドレスは 0013 FF 7 C 0013 FF 78 0013 FF 74です. C-12
![演算子 void main char abc5 printfアドレスはp pnp p pですn abc0 abc1 abc2 abc3 abc4 &演算子 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/069ae3179560274103f038dd38c55828/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])); } 実行結果 アドレスは 0013 FF 78 0013 FF 79 0013 FF 7 A 0013 FF 7 B 0013 FF 7 Cです. C-13
![演算子 void main int abc5 printfアドレスはp pnp p pですn abc0 abc1 abc2 abc3 abc4 &演算子 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/069ae3179560274103f038dd38c55828/image-14.jpg)
&演算子 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です. C-14




















![配列とアドレスポインタ void main char abc5 printfアドレスはp pnp p pですn abc0 abc1 abc2 abc3 abc4 配列とアドレス(ポインタ) 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/069ae3179560274103f038dd38c55828/image-35.jpg)
配列とアドレス(ポインタ) 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です. C-35
![配列とアドレスポインタ void main int abc5 printfアドレスはp pnp p pですn abc0 abc1 abc2 abc3 abc4 配列とアドレス(ポインタ) 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/069ae3179560274103f038dd38c55828/image-36.jpg)
配列とアドレス(ポインタ) 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です. C-36


![ポインタ演算 char ch10 char p p ch printfpn p p printfpn p 実行結果 ポインタ演算 char ch[10]; char *p; p = ch; printf("%pn", p); p++; printf("%pn", p); 実行結果](https://slidetodoc.com/presentation_image_h2/069ae3179560274103f038dd38c55828/image-39.jpg)
ポインタ演算 char ch[10]; char *p; p = ch; printf("%pn", p); p++; printf("%pn", p); 実行結果 0013 FF 74 0013 FF 75 C-39















関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 100 番地 3 C-54

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 100 番地 3 C-55



関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } x void main(){ int x = 3; func(x); printf("%dn", x); } 実行結果 3 100 番地 3 C-58


関数の仮引数と実引数(参照渡し) 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 C-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 番地 C-61

関数の仮引数と実引数(参照渡し) 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 番地 C-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 番地 3 100 番地 番地 C-63

関数の仮引数と実引数(参照渡し) 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 番地 番地 C-64

関数の仮引数と実引数(参照渡し) 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 番地 C-65

void main(){ 練習 0 int i, *j, k; i = 3; j = &i; k = i; *j = 4; k = 5; printf("i=%dn", i); } C-66
![void main 練習 1 int i2 j i03 i17 ji j printfdn 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/069ae3179560274103f038dd38c55828/image-67.jpg)
void main(){ 練習 1 int i[2], *j; i[0]=3; i[1]=7; j=i; j++; printf("%dn", *j); } C-67
![void main 練習 2 int i2 j i03 i17 ji j printfdn 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/069ae3179560274103f038dd38c55828/image-68.jpg)
void main(){ 練習 2 int i[2], *j; i[0]=3; i[1]=7; j=i; (*j)++; printf("%dn", *j); } C-68









応用例: 値を 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); } C-77


応用例: 値を 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番地であったとする.C-79



応用例: 値を 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番地であったとする.C-82


復習 i void main(){ int i=10, j=11; 104番地 int *p; の中身 p=&j; printf("*p=%dn", *p); *p=7; printf("i=%d j=%d", i, j); } 104番地 の中身 j p 100 104 108 番地 番地 番地 10 11 104 10 7 104 *p=11 実行結果 i=10 j=7 C-84

練習 3 void main(){ int x=10, y=11, z=12; int *p; printf("x=%d y=%d z=%dn", x, y, z); p=&x; *p=5; printf("x=%d y=%d z=%dn", x, y, z); p=&y; *p=6; printf("x=%d y=%d z=%dn", x, y, z); p=&z; *p=7; printf("x=%d y=%d z=%dn", x, y, z); } 何と表示される? C-85
![練習 4 void main 何と表示される int x3 int p x010 x120 x230 printfx0d x1d 練習 4 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d](https://slidetodoc.com/presentation_image_h2/069ae3179560274103f038dd38c55828/image-86.jpg)
練習 4 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); p=x; /* p=&(x[0]) の意味 */ *p=7; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); p++; *p=6; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); p++; *p=5; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); } C-87
![練習 5 void main 何と表示される int x3 int p x010 x120 x230 printfx0d x1d 練習 5 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d](https://slidetodoc.com/presentation_image_h2/069ae3179560274103f038dd38c55828/image-87.jpg)
練習 5 void main(){ 何と表示される? int x[3]; int *p; x[0]=10; x[1]=20; x[2]=30; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); p=x; /* p=&(x[0]) の意味 */ *p=7; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); (*p)++; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); *p=6; printf("x[0]=%d x[1]=%d x[2]=%dn", x[0], x[1], x[2]); } C-89