回答編集履歴
3
微修正
test
CHANGED
@@ -66,6 +66,8 @@
|
|
66
66
|
|
67
67
|
#include <iostream>
|
68
68
|
|
69
|
+
#include <vector>
|
70
|
+
|
69
71
|
#include <iterator>
|
70
72
|
|
71
73
|
|
@@ -76,12 +78,20 @@
|
|
76
78
|
|
77
79
|
long lary[456];
|
78
80
|
|
81
|
+
std::vector<int> ivec(789);
|
82
|
+
|
83
|
+
int* iary;
|
84
|
+
|
79
85
|
|
80
86
|
|
81
87
|
std::cout << std::size(cary) << std::endl;
|
82
88
|
|
83
89
|
std::cout << std::size(lary) << std::endl;
|
84
90
|
|
91
|
+
std::cout << std::size(ivec) << std::endl;
|
92
|
+
|
93
|
+
//std::cout << std::size(iary) << std::endl; // ちゃんとエラーになってくれる
|
94
|
+
|
85
95
|
}
|
86
96
|
|
87
97
|
```
|
2
追記
test
CHANGED
@@ -57,3 +57,31 @@
|
|
57
57
|
char str[100] だったら sizeof(str) = sizeof(char[100]) だから 100でしょうけどね。
|
58
58
|
|
59
59
|
んなわけで、sizeof(str) / sizeof(str[0]) がまともに動くのは str が固定長配列のときに限ります。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
[おまけ] C++ なら sizeof(xxx) / sizeof(xxx[0]) あらため std::size 使いましょう。
|
64
|
+
|
65
|
+
```C++
|
66
|
+
|
67
|
+
#include <iostream>
|
68
|
+
|
69
|
+
#include <iterator>
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
int main() {
|
74
|
+
|
75
|
+
char cary[123];
|
76
|
+
|
77
|
+
long lary[456];
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
std::cout << std::size(cary) << std::endl;
|
82
|
+
|
83
|
+
std::cout << std::size(lary) << std::endl;
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
```
|
1
追記
test
CHANGED
@@ -53,3 +53,7 @@
|
|
53
53
|
|
54
54
|
|
55
55
|
char* str なんだから、sizeof(str) = sizeof(char*) であり、大抵8(あるいは4) を返します。
|
56
|
+
|
57
|
+
char str[100] だったら sizeof(str) = sizeof(char[100]) だから 100でしょうけどね。
|
58
|
+
|
59
|
+
んなわけで、sizeof(str) / sizeof(str[0]) がまともに動くのは str が固定長配列のときに限ります。
|