Расшифровка кода указателя C

#c

#c

Вопрос:

Я новичок в C и наткнулся на некоторый код, касающийся указателей, и мог бы воспользоваться некоторой помощью в его расшифровке. Что это значит? Похоже, что переменная p преобразуется в указатель на int. Меня смущает код (int *).

 *(int *)p = 0x113
  

Ответ №1:

Он преобразует p в указатель на int, а затем сохраняет (целое) значение 0x113 в указанном местоположении.

Ответ №2:

Когда вы сталкиваетесь с чем-то подобным, лучший способ подойти к этому — отделить его и выполнять по одному шагу за раз. Начните с того, что немедленно приводит к соответствующей переменной, и переходите оттуда. Вот оно

 *  (int *)  p 
  

Начиная с середины, выполняется приведение к указателю типа int:

 (int *)
  

Приведение работает с переменной p . Итак, вы знаете, что выполняете приведение p к int * . Итак, следующее просто говорит о приведении переменной p к типу int * :

 (int *)p
  

Тогда последняя часть головоломки — это * , в которой говорится о разыменовании всего «shebang». Итак, в его окончательной форме вы просто разыменовываете, p который был приведен к int * :

 *(int *)p
  

Ответ №3:

В нем говорится: «обработайте p как указатель на тип int, затем сохраните значение 0x113 в 4 байтах, на которые указывает p» (при условии, что int равен 4 байтам). В результате, если, например, p объявлен как указатель на char , эта команда сможет изменять 4 байта вместо всего одного (размер символа).