Передача указателя по ссылке в чистом С - C (СИ)
Формулировка задачи:
Здравствуйте.
Есть следующий код, который успешно компилируется С++ компилятором, а вот на чистом С - уже нельзя.
Ну и вопрос: как этот код скомпилировать на С?
#include <stdio.h>
void init(int** &q, int* &p) //так нельзя на С
{
q = &p;
printf("Value of x via q in function init: %d\n\n", **q); /* вывод значения х, через q */
}
void main()
{
int x = 100;
int *p = &x;
int **q = NULL;
init(q, p);
printf("Value of x via q in function Main: %d\n\n", **q); /* вывод значения х, через q */
system("pause");
}Решение задачи: «Передача указателя по ссылке в чистом С»
textual
Листинг программы
#include <stdio.h>
void init(int ** q, int * p)
{
*q = p;
/* вывод значения х, через q */
printf("Value of x via q in function init: %d\n\n", **q);
return;
}
void main()
{
int x = 100;
int *p = &x;
int *q = NULL;
printf("Value of x via p in function Main: %d\n\n", *p);
init(&q, p);
/* вывод значения х, через q */
printf("Value of x via q in function Main: %d\n\n", *q);
system("pause");
return;
}
Объяснение кода листинга программы
- Объявление функции
initс двумя аргументами типаint *. - Внутри функции
initприсваивание аргументаqзначению аргументаp. - Вывод значения переменной
xчерез указательqс помощью функцииprintf. - Возвращение из функции
initбез значений. - Объявление функции
mainс типом возвратаvoid. - Объявление переменной
xтипаintсо значением100. - Объявление переменной
pтипаint*и инициализация её значением адреса переменнойx. - Объявление переменной
qтипаint*и инициализация её значениемNULL. - Вывод значения переменной
xчерез указательpс помощью функцииprintf. - Вызов функции
initс аргументами&qиp. - Вывод значения переменной
xчерез указательqс помощью функцииprintf. - Вызов функции
systemс аргументомpause. - Возвращение из функции
mainбез значений. - Конец кода.