В первом примере A
- это просто глобальная переменная, которую main()
использует напрямую.
Во втором примере functionOutsideMain()
имеет свой собственный параметр A
, который он использует, тогда какmain()
по-прежнему использует глобальную переменную A
.
functionOutsideMain()
принимает свой A
параметр значением .Когда main()
передает глобальную переменную A
в functionOutsideMain()
, создается копия этого A
, и поэтому любое значение, которое functionOutsideMain()
присваивает его параметру A
, не будетприменить к глобальной переменной A
, поэтому main()
не видит изменения.
Чтобы сделать то, что вы пытаетесь, вам нужно, чтобы functionOutsideMain()
принял его A
параметр по ссылке вместо:
void functionOutsideMain(int** &A, int n, int m)
Теперь любое значение functionOutsideMain()
, назначенное его параметру A
, будет присвоено глобальной переменной A
, и, таким образом, будет замечено main()
.