Я новичок в C для численного анализа после многих лет работы с Matlab.У меня есть функция, которая создает массив, и мне нужно вернуть его к main ().У меня были обычные проблемы с массивами и указателями, и, поигравшись, выяснил, как это сделать.Но возмущение оставило мне концептуальный вопрос, основанный на следующем коде.
#include <stdio.h>
void array_set(int y_out[2][2]);
void int_set_wrong(int y);
void int_set_right(int *y);
int main (int argc, const char * argv[]) {
int y_array[2][2]={{0,0},{0,0}};
int y_int_1 = 0;
int y_int_2 = 0;
array_set(y_array);
int_set_wrong( y_int_1 );
int_set_right( &y_int_2 );
printf("\nValue array: %d \n",y_array[0][0]);
printf("Value int wrong: %d \n",y_int_1);
printf("Value int right: %d \n",y_int_2);
return 0;
}
void array_set(int y_out[2][2]){
y_out[0][0] = 10;
y_out[1][0] = 20;
y_out[0][1] = 1;
y_out[1][1] = 2;
}
void int_set_wrong(int y){
y = 10;
}
void int_set_right(int * y){
*y = 10;
}
Вышеприведенный фрагмент возвращает: массив значений: 10 значение int неправильное: 0 значение int right: 10
Myвопрос состоит в нескольких частях, сначала
, почему работает функция 'array_set'?Я ожидаю, что он потерпит неудачу так же, как это сделал int_set_wrong.
Как по-разному обрабатываются массивы ints и int при обработке?есть локальная версия y?
Если так, то почему нет локальной версии y_out при настройке массива?
Спасибо за помощь.Кроме того, если есть что-то, что вызовет проблемы с моей реализацией array_set, пожалуйста, включите.
- Эндрю