Я тут немного догадываюсь, так как не совсем понятно, о чем вы задаетесь вопросом, но я думаю, что вы спрашиваете, если a
и b
оба указывают на одну и ту же память после назначения c = a
?
В этом случае ответ - да.
+---+ +-------------------------------+
| a | --> | Memory allocated by malloc... |
+---+ +-------------------------------+
Если мы посмотрим на это графически, после a = malloc(...)
у вас будет что-то вроде
+---+ +-------------------------------+
| a | --> | Memory allocated by malloc... |
+---+ +-------------------------------+
Тогдапосле задания c = a
у вас есть что-то вроде
+---+
| a | --\
+---+ \ +-------------------------------+
>--> | Memory allocated by malloc... |
+---+ / +-------------------------------+
| c | --/
+---+
А после return c
с b = foo(b)
у вас будет только
+---+ +-------------------------------+
| b | --> | Memory allocated by malloc... |
+---+ +-------------------------------+
Важное примечание: Если вы не знаетеРазмер выделенной памяти другим способом, использование выделенной памяти может быть проблематичным, так как вы не знаете, где это заканчивается.Выход за пределы приводит к неопределенному поведению .
Однако, пока вы находитесь в пределах границ выделенной памяти, вы можете использовать ее любым способомПожалуйста.Вы можете писать в него или читать из него, разыменовав указатель b
.
Еще одно важное замечание: передача аргумента в foo
не имеет значения, функция foo
с таким же успехом можно сделать return a
и не возиться с аргументом, и конечный результат (b
, указывающий на память) будет таким же:
uint8_t foo(void)
{
uint8_t *a = malloc(...);
return a;
}
И переменная a
даже не требуется:
uint8_t foo(void)
{
return malloc(...);
}
Если обе эти функции указаны выше, конечный результат после b = foo()
все равно будет
+---+ +-------------------------------+
| b | --> | Memory allocated by malloc... |
+---+ +-------------------------------+