"мы пропускаем что-то вроде"
getValue(0X01, &info[4], 30);
О, теперь ты?Потому что там создается страшное количество плохой кармы.
Во-первых, передача шестнадцатеричных значений немного странная.Вы можете передать константу или значение #defined, например, TAG_01.В вашем приложении это может быть совершенно нормально, но я буду осторожен.
Второй аргумент - это когда становится страшно.info - это указатель (предположительно установленный в & dest), значение, которое содержит информация, является адресом объекта, на который вы указываете.Если вы хотите передать адрес, вы должны указать на объект, а затем передать информацию без амперсанда или обработки его как массива.Что вы делаете, используя квадратные скобки [], чтобы получить элемент dest, а затем получить адрес этого.
Теперь, возможно, вы используете указатели каким-то оригинальным способом, и вы действительно хотите ссылаться на 4-й байт после него.Но я сомневаюсь в этом.Вы, вероятно, просто копаетесь с указателями, чтобы увидеть, как они работают, и это хорошо.Но когда вы начинаете делать вещи, если вы хотите передать сообщение, объявите сообщение и отправьте его.Не вставляйте символьную строку в часть большего массива.Это плохая форма.Вместо этого используйте структуру.
здесь я понимаю, что я передаю адрес значений указателю.
Ну, вы передаете адрес функции, а не указателю.
"в этой функции мы передаем что-то вроде"
retriveValue(&ie[3], (Byte*)&dest, 2);
Опять же, я в холодном поту из-за того, как это страшно неправильно.Никогда не делай этого.О ком это гнусное «мы», о котором ты говоришь?Являетесь ли вы частью какого-то ужасного культа, воспевающего неописуемый диалект С в попытке установить темное правление Ктулу?H̡e͜͟ ͟c̀om͠e̴͝? ̢̛͟
В любом случае, культ в стороне,
Что плохого, если я преобразую dest в байты и передаю адреса как (Byte) & dest?
AsМесье 32 указал, что вы не передаете адрес, если вы делаете это, вы передаете байт.Помните, что длина байта составляет 8 бит.Это один символ.Адрес обычно составляет 32 или 64 бита, в зависимости от среды.Поэтому, когда вы приводите его таким образом, вы отбрасываете 3/4 нужных вам данных, и это не соответствует определению функции.И это грех против природы.
Как бы я прошел, если dest имеет тип char *, например, для char * dest;?
Да, просто dest
, все обычное и ванильное.Это потому что dest
не символ.Он объявлен как dest[100]
, что означает, что dest[0]
является символом, но dest является адресом dest[0]
, как указатель.
Соглашение о массиве - это всего лишь небольшая часть указателей, чтобы помочьдержать вещи прямо.Функциональной разницы между *(dest+3)
и dest[3]
нет.На техническом уровне массивы и указатели отличаются в том смысле, что объявления массивов, такие как dest
, будут рассматриваться как const
во время компиляции, поэтому это не будет занимать ОЗУ.Указатель char * будет иметь свой собственный небольшой объем оперативной памяти, который вы можете увеличивать при циклическом просмотре ваших данных, но только темный всегда использует такие указатели.Почему он спит?Бесконечный цикл, потому что он не правильно использовал свои указатели.
Наконец, если вы уже приняли ответ г-на 32, который был НАИБОЛЕЕ впереди моего, вам действительно следует вернуть его обратно.И просто скажи нет мертвым инопланетным богам.