В приведенном ниже коде ptr печатает «привет мир», но temp пуст, хотя я прохожу temp в качестве адреса. Каковы могут быть возможные причины?указатель на символ не возвращает правильное значение
#include <stdio.h>
#include <string.h>
#include <malloc.h
unsigned char temp[1024];
void func(unsigned char *ptr)
{
const char* x = "hello world";
ptr = (unsigned char*) x;
printf("ptr=%s\n",ptr);
}
int main()
{
func(temp);
printf("temp=%s\n",temp);
return 0;
}
Термин _shadow параметр passing_ необычна терминология - конечно же, не стандартной терминологии. Но базовый диагноз правильный: вы передаете указатель по значению и изменяете локальную копию указателя в функции, не меняя указателя в вызывающем коде. Если вы хотите изменить указатель в функции, вам нужно передать адрес указателя, который будет изменен на функцию, так же, как если бы вы хотели изменить 'int', переданный функции, вы должны передать адрес «int» будет изменен на функцию. –
@JonathanLeffler yep; параметр передается как тень (или копия). Я думаю, что обычная терминология может быть по-значению, что немного вводит в заблуждение, поскольку оно копирует значение и не меняет его. – amdixon