В вашем коде несколько ошибок.
Во-первых, когда вы не понимаете всего, что делаете, рассматривайте предупреждения как ошибки. Потому что предупреждения, отображаемые во время компиляции, являются ошибками в данном случае и приводят к segfault.
Когда вы компилируете программу, всегда используйте флаги, такие как gcc -Wall -Werror -Wextra
. Предупреждения будут рассматриваться как ошибки.
Во-вторых, ваша программа не работает, потому что вы не понимаете, как работают указатели и массивы. Когда вы объявляете массив int, такой как int a[n]
, и пытаетесь получить доступ к массиву, a[n]
будет указывать на первый элемент в массиве. Поэтому, если вы хотите передать массив в функцию, вы не можете передать int a[n]
в качестве параметра. Потому что это int.
Если вы хотите передать массив, вы должны сказать «Я хочу дать вам адрес, если этот первый элемент, который является & a [0]», то же самое, что сказать «a».
Так что ваша функция должна принимать в качестве параметра?
Если вы зададите в качестве параметра «int a [n]», вы дадите ему int. Но вы хотите адрес этого int, поэтому int *.
Удачи