Cでローカル変数(動的または静的、配列かどうか)を使用する場合は、それを使用する関数に渡す必要があります。それがあなたの最初のコードの何が問題なのか、test()
何も知りませんdata
。
配列(動的または静的)を宣言するときは、同じ方法で配列を関数に渡すことができます。次のコードはかなり無意味ですが、動的配列の使用は実際には静的配列と同じであることを示しています。
void assign_function(int arr[], int len_of_arr, int *arr2, int len_of_arr2);
void print_function(int *arr, int len_of_arr, int arr2[], int len_of_arr2);
int main()
{
int data[2] = {0}; // static array of 2 ints
int *data2 = malloc(3 * sizeof(int)); // dynamic array of 3 ints
assign_function(data, 2, data2, 3);
print_function(data2, 3, data, 2);
free(data2); // One difference is you have to free the memory when you're done
return 0;
}
したがって、動的または静的に、ポインターを介して、またはポインターとして配列を渡すことができますが、配列の大きさを知るために、同様array[]
に渡す必要があります。int
void assign_function(int arr[], int len_of_arr, int *arr2, int len_of_arr2)
{
int count;
for(count = 0; count < len_of_arr; count++) //This is the static array
arr[count] = count;
for(count = 0; count < len_of_arr2; count++) //This is the dynamic array
arr2[count] = count;
}
次に、楽しみのために、どの配列がここに渡されarr
、どのようにアクセスされるかを逆にします。arr2
void print_function(int *arr, int len_of_arr, int arr2[], int len_of_arr2)
{
int count;
for(count = 0; count < len_of_arr; count++) //This is the dynamic array now
printf("arr[%d] = %d\n", count, *(arr+count));
for(count = 0; count < len_of_arr2; count++) //And this is the static array
printf("arr2[%d] = %d\n", count, *(arr2+count));
}
ポイントは、ポインタを介して[]
、またはポインタとして通過し、経由または差分ポインタにアクセスする[]
のはあなた次第です。どちらも問題なく、両方とも機能します。ポインタは読みにくく、書き込み時にエラーが発生しやすい傾向があるため、できる限りポインタを避けるようにしています。