Я новичок в C, и я ищу способы передать массив функции и получить доступ к элементам.Передача массива функции как массива vs как указатель
Я нахожу, что есть 3 способа сделать это.
- проход в массиве, а функция конкретных параметров, как тип массива
- проход в массиве, а функция конкретных параметров, как тип указателя
- проход в адрес из первого элемента (на самом деле этот адрес равен адресу массива, я думаю, что это то же самое, что и метод 2)
То, что я не понимаю, заключается в том, что с использованием метода 1. Addr ess передаваемого массива отличается от адреса параметра массива в функции. В чем разница применения метода 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%
спасибо за ваш быстрый ответ. Ой! Извините за ту глупую ошибку, которую я совершил. Я буду принимать ваш ответ как можно быстрее :) – code4j
@ code4j Я бы не назвал это глупой ошибкой. C - сложный язык с очень специфическими и ситуационными правилами. Раньше или позже все сталкиваются с этим вопросом. – cdhowie