ユーザ入力配列を取り、関数に行き、各数値の間にゼロを追加して配列2に保存するコードを書き直そうとしています。私のソースコードはうまく動作しますが、関数が各配列要素を訪れるだけのポインタ演算を使用するようにするには、スクリプトをサブスクリプト化することはできません。 自分のコードやこれを行う方法の提案について教えてください。C配列ポインタ算術
ソースコード:
#include <stdio.h>
void insert0(int n, int a1[], int a2[]);
int main(void) {
int i;
int n;
printf("Please enter the length of the input array: ");
scanf("%d", &n);
int a[n];
int b[2*n];
printf("Enter %d numbers for the array: ", n);
for (i = 0; i < n; i++){
scanf("%d", &a[i]);
}
insert0(n, a, b);
printf("Output array:");
for (i = 0; i < 2*n; i++){
printf(" %d", b[i]);
printf("\n");
}
return 0;
}
void insert0(int n, int a[], int b[]) {
int i, j = 0;
for(i = 0; i < n; i++, j+=2){
b[j]= a[i];
b[j+1] = 0;
}
}
マイ算術:
#include <stdio.h>
void insert0(int n, int *a1, int *a2);
int main(void) {
int i;
int n;
printf("Please enter the length of the input array: ");
scanf("%d", &n);
int a1[n];
int a2[2*n];
printf("Enter %d numbers for the array: ", n);
for (i = 0; i < n; i++){
scanf("%d", &a2[i]);
}
//not sure if this is how you call it, I've seen it called with arr
insert0(n, a1, a2);
printf("Output array:");
for (i = 0; i < 2*n; i++){
printf(" %d", a2[i]);
printf("\n");
}
return 0;
}
void insert0(int n, int *a1, int *a2) {
int *p;
int j = 0;
// I think I translated this properly
for(p = a1; p < a1+n; p++, j+=2){
a2+j = a1+p;
//unsure how to get a2[j+1] to still work here with pointer
a2(j+1) = 0;
}
}
返信を改善するためにDVerにご意見ありがとうございますか?ありがとう – user3078414
あなたの返信はしっかりしていて、ポインタ算術を使う方法を簡単に示しています。私の意見では(指針算術に対する初心者でも)それは単純であり、改善する必要はありません。私はそれを使用して、将来ポインタの算術演算を使用する必要があるときにそれをもう一度見直してみましょう。 – user6124417