回答編集履歴
2
修正
test
CHANGED
@@ -1,21 +1,5 @@
|
|
1
1
|
アドレスの計算は内部的にはデータサイズに対する掛け算で表されます
|
2
2
|
```int```のデータサイズは```4byte```なので、例えば```int配列```の場合、今回の```foo```のケースでは```foo[0]->foo[2]```の移動量が```4*2=8byte```となります
|
3
|
-
|
4
|
-
尚、最小のデータサイズは```void```の```0byte```です
|
5
|
-
```
|
6
|
-
#include<stdio.h>
|
7
|
-
|
8
|
-
int main(void){
|
9
|
-
void *p=(void *)new int; //voidポインタへキャスト
|
10
|
-
printf("%lld,%lld,
|
11
|
-
(long long)p,
|
12
|
-
(long long)(p+100000));
|
13
|
-
}
|
14
|
-
```
|
15
|
-
```
|
16
|
-
335998832,336098832
|
17
|
-
```
|
18
|
-
このように0に何を掛けても0なので```voidポインタ```のアドレスは増減しません
|
19
3
|
|
20
4
|
また```C++```ではインスタンスのメンバとして```1byte```以下のサイズのフィールド領域を定義できます
|
21
5
|
```
|
1
追記
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
#include<stdio.h>
|
7
7
|
|
8
8
|
int main(void){
|
9
|
-
void *p=(void *)new int;
|
9
|
+
void *p=(void *)new int; //voidポインタへキャスト
|
10
10
|
printf("%lld,%lld,
|
11
11
|
(long long)p,
|
12
12
|
(long long)(p+100000));
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#include<stdio.h>
|
23
23
|
|
24
24
|
struct A{
|
25
|
-
unsigned char c:3=0; //3b
|
25
|
+
unsigned char c:3=0; //3bit領域
|
26
26
|
};
|
27
27
|
|
28
28
|
int main(void){
|