Все массивы в C интерпретируются как указатель на первый элемент, и любой указатель может использоваться в качестве базы массива для доступа к n-му элементу с синтаксисом [n] . Если вы хотите изменить значение этого символа внутри функции, то вы должны передать указатель на него, но нет проблем с доступом к нему, как вы:
if (*val == 'I') {
*val = 'S';
}
Это больше о том, что ваша функция ожидает от ввода, если она ожидает, что ввод будет указателем на один символ, тогда вполне нормально получить char * и получить доступ только к тем данным, на которые указывает указатель , В C, когда у вас есть указатель p , вы не можете ограничивать себя в обработке его как базы массива и записи p [5], даже если он указывает на один символ, p [5 ] будет просто продвигаться в 5 раз на размер char и обрабатывать все найденные данные как char и возвращать их.
И обычно, когда функция получает буфер как указатель, он также получает размер этого буфера в качестве параметра, например: void function (char * buf, int buf_length)
То, что вы, вероятно, ищете, доступно в C ++ и называется передавая по ссылке , вы можете прочитать об этом здесь .
В C ++ это будет работать:
// The & here indicates that val is received by reference, meaning that
// if we change val here, it will be also changed where we passed it from.
// Behind the scene it is done by passing a pointer(char*) and replacing
// every access to the variable with dereferencing and then accessing:
// val == 'I' -> *val == I or val = 'S' with *val = 'S'
void function(char &val){
if (val == 'I') {
val = 'S';
}
}
int main(){
char val = 'I';
function(val); // passing as normal char, but will be passed by reference
return 0;
}