Для начала массивы являются немодифицируемыми l-значениями. Так что вы не можете писать, например,
validArray = validArray + 2;
Что касается этого фрагмента псевдокода
void foo(int *b)
{
b=b+2;
}
in main:
foo(validArray);
, тогда указатель b
является локальной переменной функции. Таким образом, в функции значение b
изменяется из-за этого оператора
b=b+2;
Но это не влияет на переданный аргумент.
Вместо этого вы можете написать
void foo( int **b )
{
*b = *b + 2;
}
int main( void )
{
int validArray[] = { 1, 2, 3, 4, 5 };
int *p = validArray;
foo( &p );
printf( "%d\n", *p );
}
В C термин «передача по ссылке» означает косвенную передачу объекта через указатель на него. Таким образом, разыменовывая указатель в функции, вы можете изменить указанный объект. Указатели - это одни и те же объекты. Поэтому, если вы хотите изменить исходный указатель, вы должны передать указатель на указатель.