Вам необходимо понять механизм передачи array
функции в языке программирования Си. Когда вы передаете массив функции в C, указатель (адрес) на первый элемент массива передается функции, и, поскольку у вас есть ссылка на него, вы можете изменить содержимое массива в функции (но вы можете не меняйте место в памяти, на которое указывает массив). Я рекомендую взглянуть на этот вопрос .
Программа ниже имеет две функции. Функция rightFunc
- это простой и правильный подход к достижению того, что вы пытались сделать. Тем не менее, я предоставил func
, который показывает способ передачи указателя (или ссылки) на массив указателей.
#include <stdio.h>
#define SIZE 100
void rightFunc(char *array[], char *b)
{
array[0] = b;
}
void func(char *(*array)[], char *b)
{
(*array)[0] = b;
}
int main(int argc, char *argv[])
{
char *array_in_main[SIZE];
char b_in_main = 'b';
func(&array_in_main, &b_in_main);
printf("Character is %c\r\n", *array_in_main[0]);
b_in_main = 'c';
rightFunc(array_in_main, &b_in_main);
printf("Character is %c\r\n", *array_in_main[0]);
return 0;
}
Я хотел бы указать на одну ошибку в вашей программе. Вы можете получить адрес локальной переменной (automatic storage class
), но этот адрес не будет действительным вне функции (после выхода из функции). Чтобы исправить проблему в вашей программе, я изменил функции так, чтобы в вашей программе было pointer to char
.