1

我认为以下代码是正确的,但它不起作用。

int x, *ra;     
&ra  = x;

int x, ra;
&ra = x;

如果这两个代码片段都正确,请帮助我。如果没有,您在其中看到了什么错误?

4

6 回答 6

17

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

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

&&符号是运算符的地址(在一元语法中),使用&您可以将变量的地址分配x指针变量ra

此外,正如您的问题标题所示:Assigning int value to an address.

ra是一个包含变量地址的指针,x因此您可以为xvia分配一个新值ra

*ra = 20; 

这里*在指针变量(在一元语法中)之前是尊重运算符在地址处给出值。

因为您还将问题标记为,所以我认为您对引用变量声明感到困惑,即:

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

因此,在引用变量的情况下,如果你想给x它分配一个新值,在语法上非常简单,就像我们对值变量所做的那样:

ra = 20;

(注意即使ra是我们分配给x没有&*仍然改变的引用变量,这是引用变量的好处:简单易用,可以用作指针!)

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

在 C 中,我们只有指针和值变量,而在 C++ 中,我们有指针、引用和值变量。在我的链接答案中,我试图解释指针和引用变量之间的区别

于 2013-07-25T08:34:12.320 回答
5

两者都不正确。

当你声明一个指针时,你给它分配了一个变量的地址。你正在尝试相反的方式。正确的方法是:

int x,*ra;
ra  = &x;
于 2013-07-25T08:34:43.487 回答
5

这两个原因,以你在问题中的方式,未定义的行为。

首先,您不初始化指针,这意味着它指向一个随机位置(或者NULL如果变量是全局的)。

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

于 2013-07-25T08:35:17.220 回答
3

这是一些带注释的代码:

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
于 2013-07-25T08:43:24.327 回答
1

这是我的 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;
于 2013-07-25T08:54:38.160 回答
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.
于 2013-07-25T19:00:16.873 回答