将int值分配给地址

时间:2013-07-25 08:33:03

标签: c++ c visual-studio-2010 pointers

我认为以下代码是正确的,但它无效。

int x, *ra;     
&ra  = x;

int x, ra;
&ra = x;

如果这两个代码段都正确,请帮助我。如果没有,你在他们身上看到了什么错误?

6 个答案:

答案 0 :(得分:17)

你的两个表达都不正确,应该是:

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

& ampersand是运算符的地址(采用一元语法),使用&您可以将变量x的地址分配到pointer变量{ {1}}。

此外,正如您的问题标题所示:ra

Assigning int value to an address是一个包含变量ra地址的指针,因此您可以通过x

x分配新值
ra

这里*ra = 20; 指针变量(在一元语法中)是deference operator在地址处给出值。

因为您还向标记了问题,所以我认为您对reference variable声明感到困惑,即:

*

因此,在引用变量的情况下,如果要为int x = 10; int &ra = x; // reference at time of declaration 分配一个新值,它的语法非常简单,就像我们对值变量一样:

x

(请注意,即使ra = 20; 是我们分配给ra而没有x的参考变量,或者&仍然有变化反映,这是参考变量的好处:简单易用作为指针!)

记住在声明时给出的引用绑定,它不能改变指针变量在程序中稍后指向新变量的位置。

在C中我们只有指针和值变量,而在C ++中我们有一个指针,引用和值变量。在我的链接答案中,我试图解释differences between pointer and reference variable

答案 1 :(得分:5)

两者都不正确。

声明指针时,为其指定变量的地址。你正在尝试相反的方式。正确的方法是:

int x,*ra;
ra  = &x;

答案 2 :(得分:5)

这两个原因,就像你在问题中的方式一样,是未定义的行为。

对于第一个,您不初始化指针,这意味着它指向一个随机位置(如果变量是全局的,则为NULL。)

对于第二种情况,您尝试更改变量所在的地址,这是不允许的(如果它甚至会编译)。

答案 3 :(得分:2)

这是一些带注释的代码:

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

答案 4 :(得分:1)

这是我的2美分。

如果您要了解C中的指针。首先区分*运算符和*类型限定符/说明符。

请参阅C *中的一个syntaxique元素,既可以同时扮演角色,又可以同时扮演角色。类型限定符:

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

获得正确的int。作为运营商。 (*ca)的别名

*c = 9;

我承认这很混乱,可能会陷入很多初学者的困境。确保您在将*用作运算符或将其用作类型限定符时识别。

同样的事情适用于&,尽管它不常用作类型限定符。

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

它更常用于获取对象的地址。因此,它被用作运营商。

c = &f;

答案 5 :(得分:0)

  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.