n struct Mass double px double py double

  • Slides: 18
Download presentation

構造体のメンバーとポインタ n ポインタは、構造体のメンバーも指せます。 struct Mass { double px; double py; double vx; double vy;

構造体のメンバーとポインタ n ポインタは、構造体のメンバーも指せます。 struct Mass { double px; double py; double vx; double vy; }; int main(){ struct Mass m; struct Mass* pm; pm = &m; double* pd; pd = &m. vx; } pm pd m. px m. py m. vx m. vy m

ポインタと配列 ポインタをずらす n ポインタに整数を足すと、足した分だけポインタがずれる。 l 配列は、メモリ上に詰まって並んでいるので、 ひとつずらすと次の要素のアドレスになる。 char cs[3]; short ss[3]; int main(){ char*

ポインタと配列 ポインタをずらす n ポインタに整数を足すと、足した分だけポインタがずれる。 l 配列は、メモリ上に詰まって並んでいるので、 ひとつずらすと次の要素のアドレスになる。 char cs[3]; short ss[3]; int main(){ char* pc = &cs[0]; *pc = ’a’; *(pc+1) = ’b’; *(pc+2) = ’c’; short* ps = &ss[0]; *ps = 0; *(ps+1) = 1; *(ps+2) = 2; } pc pc+1 pc+2 ps ps+1 ps+2 0 x 0000 0 1 1 0 0 1 0 x 00000002 0 x 00000003 0 x 00000004 cs[0] ’a’ 0 x 00000005 cs[1] ’b’ cs[2] ’c’ 0 x 00000006 0 x 00000007 0 x 00000008 ss[0] 0 0 x 00000009 0 x 0000000 A ss[1] 1 0 x 0000000 B 0 x 0000000 C ss[2] 2 0 x 0000000 D char* なポインタは 1 byteずつ short*なポインタは 2 byteずつずれる (int*, float* は 4 byte, double* は 8 byte)

sizeof 演算子 n 変数のサイズを返す演算子です。 struct S{ char c; int i; }; int main(){ printf("sizeof(char)

sizeof 演算子 n 変数のサイズを返す演算子です。 struct S{ char c; int i; }; int main(){ printf("sizeof(char) = %dn", sizeof(char)); printf("sizeof(int) = %dn", sizeof(int)); printf("sizeof(double) = %dn", sizeof(double)); double d; printf("sizeof d = %dn", sizeof d); short a[10]; printf("sizeof a = %dn", sizeof a); printf("sizeof a[0] = %dn", sizeof a[0]); printf("length of a is %dn", sizeof a / sizeof a[0]); sizeof(char) = 1 sizeof(int) = 4 sizeof(double) = 8 sizeof d = 8 sizeof a = 20 sizeof a[0] = 2 length of a is 10 sizeof s = 8 10 0 20 20 struct S s; printf("sizeof s = %dn", sizeof s); s. c = 0 x 10; s. i = 0 x 2020; char* p = (char*)&s; int i; for(i=0; i<sizeof(s); ++i){ printf(" %x", *(p+i)); } return 0; }