私はCの初心者で、配列を関数に渡して要素にアクセスする方法を探しています。
それには3つの方法があることがわかりました。
- 配列を渡し、関数はパラメーターを配列の型として特定します
- 配列を渡し、関数はパラメーターをポインターの型として特定します
- 最初の要素のアドレスを渡します(実際、このアドレスは配列アドレスと同じです。これは方法2と同じだと思います)
私が理解していないのは、方法1を使用することです。渡される配列のアドレスは、関数内の配列パラメーターのアドレスとは異なります。方法 1 と方法 2 の使用の違いは何ですか。
コード:
#include <stdio.h>
void pass_by_array(int x[]);
void pass_by_pointer(int *x);
int main(void){
int i;
int base[5] = {3, 7, 2, 4, 5};
printf("address of first element in main %p\n", &base[0]);
printf("address of array in main %p \n\n", &base);
pass_by_array(base);
pass_by_pointer(base);
}
/* Pass in the array as type of int x [] */
void pass_by_array(int x[]){
printf("address of first element passed in: %p \n", &x[0]);
printf("address of array passed in: %p \n\n", &x);
}
/* Pass in the array as type of int pointer*/
void pass_by_pointer(int *x){
printf("passing in array by pointer, address: %p",x);
}
出力:
address of first element in main 0xbfcea3ac
address of array in main 0xbfcea3ac
address of first element passed in: 0xbfcea3ac
address of array passed in: 0xbfcea390
passing in array by pointer, address: 0xbfcea3ac%