回答編集履歴

3

例の変更

2019/04/18 10:36

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -12,15 +12,29 @@
12
12
 
13
13
  int main(void) {
14
14
 
15
- int arr[10];
15
+ int arr1[10];
16
16
 
17
- int *p_arr = arr;
17
+ int *p_arr1 = arr1;
18
18
 
19
19
 
20
20
 
21
- std::cout << sizeof(arr) << "\n"
21
+ int *p_arr2 = new int[10];
22
22
 
23
+
24
+
25
+ std::printf(
26
+
27
+ " arr1: %2ld\n"
28
+
23
- << sizeof(p_arr) << "\n";
29
+ "p_arr1: %2ld\n"
30
+
31
+ "p_arr2: %2ld\n", sizeof(arr1), sizeof(p_arr1), sizeof(p_arr2)
32
+
33
+ );
34
+
35
+
36
+
37
+ delete[] p_arr2;
24
38
 
25
39
  }
26
40
 
@@ -28,19 +42,21 @@
28
42
 
29
43
 
30
44
 
31
- **実行結果** [Wandbox](https://wandbox.org/permlink/nHXNKyPF8uXuBu8C)
45
+ **実行結果** [Wandbox](https://wandbox.org/permlink/Plwq6sM4eWuWix7E)
32
46
 
33
47
  ```
34
48
 
35
- 40
49
+ arr1: 40
36
50
 
37
- 8
51
+ p_arr1: 8
52
+
53
+ p_arr2: 8
38
54
 
39
55
  ```
40
56
 
41
57
 
42
58
 
43
- また new int[] で取得した領域は delete[] で解放してあげる必要があるように思います。
59
+ また new int[] で取得した領域は delete[] で解放してあげる必要があます。
44
60
 
45
61
 
46
62
 

2

追記

2019/04/18 10:36

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -49,3 +49,15 @@
49
49
  配列の先頭ポインタから配列要素数を一般に計算する方法はありません。
50
50
 
51
51
  C++ならば生配列ではなくstd::vectorを使えば良いでしょう。
52
+
53
+
54
+
55
+ > void sort(int* data)のように配列データを直接渡す方法です。
56
+
57
+ このときも関数側では要素数が1になり、しかしmain()内に戻ってくると要素数は宣言した数通りに戻っています。
58
+
59
+
60
+
61
+ 渡っているのは配列自体ではなく、配列の先頭アドレスだからです。
62
+
63
+ どうしても生配列を扱いたいのなら、要素数を併せて渡してやるのが定石です。

1

追記

2019/04/18 09:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -40,6 +40,12 @@
40
40
 
41
41
 
42
42
 
43
+ また new int[] で取得した領域は delete[] で解放してあげる必要があるように思います。
44
+
45
+
46
+
47
+ ---
48
+
43
49
  配列の先頭ポインタから配列要素数を一般に計算する方法はありません。
44
50
 
45
- C++ならば配列ではなくstd::vectorを使えば良いでしょう。
51
+ C++ならば配列ではなくstd::vectorを使えば良いでしょう。