回答編集履歴
10
回答の不備修正(SaitoAtsushiさんのコメントを参照)
test
CHANGED
@@ -4,9 +4,11 @@
|
|
4
4
|
|
5
5
|
代入しようとしている部分と
|
6
6
|
|
7
|
-
引数の型と変数名の間にスペースがないのでコンパイルエラーとなってしまいます。
|
7
|
+
~~引数の型と変数名の間にスペースがないのでコンパイルエラーとなってしまいます。~~
|
8
8
|
|
9
9
|
あとプロトタイプ宣言の部分では仮引数名は必要ないので書かなくても構わないかと思われます。
|
10
|
+
|
11
|
+
|
10
12
|
|
11
13
|
|
12
14
|
|
@@ -24,7 +26,7 @@
|
|
24
26
|
|
25
27
|
-void ary_copy(char*d, char*s, int t)
|
26
28
|
|
27
|
-
+void ary_copy(int*
|
29
|
+
+void ary_copy(int*d, int*s, int t)
|
28
30
|
|
29
31
|
{
|
30
32
|
|
@@ -82,7 +84,9 @@
|
|
82
84
|
|
83
85
|
sizeof(array1)/sizeof(array1[0])で要素数を取得できますので
|
84
86
|
|
87
|
+
上記を踏まえればC99以降(下記SaitoAtsushiさんのコメントを参照)
|
88
|
+
|
85
|
-
|
89
|
+
がコンパイルできる処理系でしかコンパイルできませんが
|
86
90
|
|
87
91
|
下記コードのように書けばよいのではないでしょうか。
|
88
92
|
|
9
constつけ忘れ修正
test
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
int array1[] = {1, 2, 3, 4, 5};
|
112
112
|
|
113
|
-
unsigned size = sizeof(array1)/sizeof(array1[0]);
|
113
|
+
const unsigned size = sizeof(array1)/sizeof(array1[0]);
|
114
114
|
|
115
115
|
int array2[size];
|
116
116
|
|
8
インクリメント部分修正
test
CHANGED
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
|
122
122
|
|
123
|
-
for(unsigned j = 0; j < size;
|
123
|
+
for(unsigned j = 0; j < size; ++j) printf("%d ", array2[j]);
|
124
124
|
|
125
125
|
|
126
126
|
|
7
回答文修正
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
引数の型と変数名の間にスペースがないのでコンパイルエラーとなってしまいます。
|
8
8
|
|
9
|
-
あとプロトタイプ宣言の部分では引数
|
9
|
+
あとプロトタイプ宣言の部分では仮引数名は必要ないので書かなくても構わないかと思われます。
|
10
10
|
|
11
11
|
|
12
12
|
|
6
コード簡略化
test
CHANGED
@@ -94,21 +94,11 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
void ary_copy(int* d, int* s,
|
97
|
+
void ary_copy(const int* const d, int* const s, const unsigned t)
|
98
98
|
|
99
99
|
{
|
100
100
|
|
101
|
-
int i;
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
for(i = 0; i < t;
|
101
|
+
for(unsigned i = 0; i < t; ++i) s[i] = d[i];
|
106
|
-
|
107
|
-
{
|
108
|
-
|
109
|
-
s[i] = d[i];
|
110
|
-
|
111
|
-
}
|
112
102
|
|
113
103
|
}
|
114
104
|
|
@@ -122,11 +112,7 @@
|
|
122
112
|
|
123
113
|
unsigned size = sizeof(array1)/sizeof(array1[0]);
|
124
114
|
|
125
|
-
|
126
|
-
|
127
115
|
int array2[size];
|
128
|
-
|
129
|
-
unsigned j;
|
130
116
|
|
131
117
|
|
132
118
|
|
@@ -134,13 +120,11 @@
|
|
134
120
|
|
135
121
|
|
136
122
|
|
137
|
-
for(j = 0; j < size; j++)
|
123
|
+
for(unsigned j = 0; j < size; j++) printf("%d ", array2[j]);
|
138
124
|
|
139
|
-
|
125
|
+
|
140
126
|
|
141
|
-
|
127
|
+
return 0;
|
142
|
-
|
143
|
-
}
|
144
128
|
|
145
129
|
}
|
146
130
|
|
5
2つ目のコードにまつわる文章の一部修正
test
CHANGED
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
sizeof(array1)/sizeof(array1[0])で要素数を取得できますので
|
84
84
|
|
85
|
-
上記を踏まえれば配列の要素数を変数で指定できる処理系でしか
|
85
|
+
上記を踏まえれば配列の要素数を変数で指定できる処理系でしかコンパイルできませんが
|
86
86
|
|
87
87
|
下記コードのように書けばよいのではないでしょうか。
|
88
88
|
|
4
コードの不備修正
test
CHANGED
@@ -82,17 +82,15 @@
|
|
82
82
|
|
83
83
|
sizeof(array1)/sizeof(array1[0])で要素数を取得できますので
|
84
84
|
|
85
|
+
上記を踏まえれば配列の要素数を変数で指定できる処理系でしか動きませんが
|
86
|
+
|
85
|
-
|
87
|
+
下記コードのように書けばよいのではないでしょうか。
|
86
88
|
|
87
89
|
|
88
90
|
|
89
91
|
```c
|
90
92
|
|
91
93
|
#include <stdio.h>
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
#define SIZE(list) (sizeof(list)/sizeof(list[0]))// 配列の要素数を取得するマクロ
|
96
94
|
|
97
95
|
|
98
96
|
|
@@ -122,17 +120,21 @@
|
|
122
120
|
|
123
121
|
int array1[] = {1, 2, 3, 4, 5};
|
124
122
|
|
123
|
+
unsigned size = sizeof(array1)/sizeof(array1[0]);
|
124
|
+
|
125
|
+
|
126
|
+
|
125
|
-
int array2[
|
127
|
+
int array2[size];
|
126
128
|
|
127
129
|
unsigned j;
|
128
130
|
|
129
131
|
|
130
132
|
|
131
|
-
ary_copy(array1, array2,
|
133
|
+
ary_copy(array1, array2, size);
|
132
134
|
|
133
135
|
|
134
136
|
|
135
|
-
for(j = 0; j <
|
137
|
+
for(j = 0; j < size; j++)
|
136
138
|
|
137
139
|
{
|
138
140
|
|
3
マクロを追記
test
CHANGED
@@ -76,11 +76,11 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
静的配列の要素数は"配列全体のバイト数/
|
79
|
+
静的配列の要素数は"配列全体のバイト数/配列一つ分のバイト数"で取得できるので
|
80
80
|
|
81
81
|
今回の場合バイト数を取得するための演算子sizeofを用いて
|
82
82
|
|
83
|
-
sizeof(array1)/sizeof(
|
83
|
+
sizeof(array1)/sizeof(array1[0])で要素数を取得できますので
|
84
84
|
|
85
85
|
上記を踏まえれば下記コードのように書けばよいのではないでしょうか。
|
86
86
|
|
@@ -92,13 +92,17 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
+
#define SIZE(list) (sizeof(list)/sizeof(list[0]))// 配列の要素数を取得するマクロ
|
96
|
+
|
97
|
+
|
98
|
+
|
95
99
|
void ary_copy(int* d, int* s, int t)
|
96
100
|
|
97
101
|
{
|
98
102
|
|
99
103
|
int i;
|
100
104
|
|
101
|
-
|
105
|
+
|
102
106
|
|
103
107
|
for(i = 0; i < t; i++)
|
104
108
|
|
@@ -118,21 +122,17 @@
|
|
118
122
|
|
119
123
|
int array1[] = {1, 2, 3, 4, 5};
|
120
124
|
|
121
|
-
int array2[
|
125
|
+
int array2[SIZE(array1)];
|
122
126
|
|
123
127
|
unsigned j;
|
124
128
|
|
125
129
|
|
126
130
|
|
127
|
-
|
131
|
+
ary_copy(array1, array2, SIZE(array1));
|
128
132
|
|
129
|
-
|
130
133
|
|
131
|
-
ary_copy(array1, array2, size);
|
132
134
|
|
133
|
-
|
134
|
-
|
135
|
-
for(j = 0; j <
|
135
|
+
for(j = 0; j < SIZE(array1); j++)
|
136
136
|
|
137
137
|
{
|
138
138
|
|
2
プロトタイプ宣言が不要なので消去
test
CHANGED
@@ -92,10 +92,6 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
-
void ary_copy(int*, int*, int);
|
96
|
-
|
97
|
-
|
98
|
-
|
99
95
|
void ary_copy(int* d, int* s, int t)
|
100
96
|
|
101
97
|
{
|
1
for用インデックスのjをintからunsignedへ変更
test
CHANGED
@@ -124,7 +124,7 @@
|
|
124
124
|
|
125
125
|
int array2[sizeof(array1)/sizeof(int)];
|
126
126
|
|
127
|
-
in
|
127
|
+
unsigned j;
|
128
128
|
|
129
129
|
|
130
130
|
|