回答編集履歴

2

修正

2025/02/11 10:25

投稿

Manabu
Manabu

スコア97

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

追記

2025/02/11 10:13

投稿

Manabu
Manabu

スコア97

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; //3byte領域
25
+ unsigned char c:3=0; //3bit領域
26
26
  };
27
27
 
28
28
  int main(void){