Присвоение значения int адресу

Я думал, что следующие коды верны, но он не работает.

int x, *ra;     
&ra  = x;

и

int x, ra;
&ra = x;

Пожалуйста, помогите мне, если оба эти фрагмента кода верны. Если нет, то какие ошибки вы видите в них?

Спасибо заранее.

Ответ 1

Ваши оба выражения неверны, это должно быть:

int x, *ra;
ra  = &x;  // pointer variable assigning address of x

& ampersand - это адрес оператора (в унальном синтаксисе), используя &, вы можете присвоить адрес переменная x в pointer переменная ra.

Кроме того, как говорится в заголовке вопроса: Assigning int value to an address.

ra - указатель содержит адрес переменной x, поэтому вы можете назначить новое значение x через ra

*ra = 20; 

Здесь * перед переменной указателя (в унальном синтаксисе) оператор deference дает значение по адресу.

Поскольку вы также отметили вопрос , чтобы я подумайте, что вы смущаетесь с ссылкой на переменную, то есть:

int x = 10;
int &ra = x; // reference at time of declaration 

Соответственно, в случае ссылочной переменной, если вы хотите назначить новое значение x, это очень просто в синтаксисе, как и для переменной значения:

ra = 20;

(уведомление даже ra является ссылочной переменной, которую мы присваиваем x без & или *, все еще меняем отражение, это преимущество ссылочной переменной: простое использование в качестве указателей!)

Помните ссылку привязки, заданную во время объявления, и она не может изменить, где переменная указателя может указывать на новую переменную позже в программе.

В C мы имеем только переменные указателя и значения, тогда как в С++ мы имеем указатель, ссылку и переменные значения. В моем связанном ответе я попытался объяснить различия между указателем и ссылочной переменной.

Ответ 2

Оба неверны.

Когда вы объявляете указатель, вы назначаете ему адрес переменной. Вы пытаетесь наоборот. Правильный способ:

int x,*ra;
ra  = &x;

Ответ 3

Обе эти причины, в том виде, в котором они у вас есть в вашем вопросе, undefined.

Во-первых, вы не инициализируете указатель, то есть он указывает на случайное местоположение (или NULL, если переменная глобальна).

Во втором случае вы пытаетесь изменить адрес, в котором находится переменная, которая (если она даже компилируется) не разрешена.

Ответ 4

Вот несколько аннотированных кодов:

int main () {
    // declare an int variable
    int x = 0; 
    // declare a pointer to an int variable
    int *p;
    // get the memory address of `x`
    // using the address-of operator
    &x;
    // let `p` point to `x` by assigning the address of `x` to `p`
    p = &x;
    // assign `x` a value directly
    x = 42;
    // assign `x` a value indirectly via `p`
    // using the dereference operator
    *p = 0;
    // get the value of `x` directly
    x;
    // get the value of `x` indirectly via `p`
    // using the dereference operator
    *p;
}

Обратите внимание, что разыменование указателя, который не указывает на допустимый объект указанного типа, не допускается.

Таким образом, вы обычно не должны делать такие вещи, как следующее (если вы действительно не знаете, что делаете):

*(int*)(12345) = 42; // assign an integer value to an arbitrary memory address

Ответ 5

Вот мои 2 цента.

Если вы пойдете на понимание указателя в C. Сначала сделайте различие между * оператором и * спецификатором/спецификатором типа.

Посмотрите, что в C * есть элемент синтаксиса, который может играть как роль, но никогда в одно и то же время. Тип классификатора:

int a;
int * c = &a;
int * my_function_returning_pointer();

И для получения правильного int. Как оператор. (*c является псевдонимом a)

*c = 9;

Я признаю, что это довольно запутанно и может ловить много новичка. Убедитесь, что вы распознаете, когда * используется как оператор или когда он используется в качестве классификатора типов.

То же самое относится к &, хотя он менее часто используется в качестве классификатора типов.

int & f = returning_a_reference();
int my_function( int & refParam);

Это чаще всего используется для получения адреса объекта. Таким образом, он используется как оператор.

c = &f;

Ответ 6

  case 1:
          int x,*ra;
          &ra  = x;
  it is wrong in c, because in c we can point to a memory location by using a pointer ( i.e *ra in your case ). this can be done as fallows          
         int x, *ra;                             x    ---------
         ra=&x;                          ra --->1000 | value  |
                                                     ----------
 NOTE :  with out initializing a variable we can't use pointer to hold the address of that variable, so you better to first initialize variable, then set pointer to that memory location.
         int x, *ra;
         x=7;
         ra=&x;



 Fallowing may be helpful to you:
 problems(mistake we do ) in handling pointers :

 1.)
      int a ,*p;
      p=a; // assigning value instead of address. that leads to segmentation fault at run time.


 2)
     int a, *p;
     &p=a; // look at here wrong assignment

 3)
     char *p="srinivas"
     strcat(p, "helo" ) ;  // we cant add a substring to the constant string.

 4) int a=5, *p;
    p=5; //  the pointer here will points to location 5 in the memory, that may damage whole system, be care full in these type of assignments.