我认为以下代码是正确的,但它不起作用。
int x, *ra;
&ra = x;
和
int x, ra;
&ra = x;
如果这两个代码片段都正确,请帮助我。如果没有,您在其中看到了什么错误?
我认为以下代码是正确的,但它不起作用。
int x, *ra;
&ra = x;
和
int x, ra;
&ra = x;
如果这两个代码片段都正确,请帮助我。如果没有,您在其中看到了什么错误?
您的两个表达式都不正确,应该是:
int x, *ra;
ra = &x; // pointer variable assigning address of x
&
是&符号是运算符的地址(在一元语法中),使用&
您可以将变量的地址分配x
给指针变量ra
。
此外,正如您的问题标题所示:Assigning int value to an address
.
ra
是一个包含变量地址的指针,x
因此您可以为x
via分配一个新值ra
*ra = 20;
这里*
在指针变量(在一元语法中)之前是尊重运算符在地址处给出值。
因为您还将问题标记为c++,所以我认为您对引用变量声明感到困惑,即:
int x = 10;
int &ra = x; // reference at time of declaration
因此,在引用变量的情况下,如果你想给x
它分配一个新值,在语法上非常简单,就像我们对值变量所做的那样:
ra = 20;
(注意即使ra
是我们分配给x
没有&
或*
仍然改变的引用变量,这是引用变量的好处:简单易用,可以用作指针!)
记住在声明时给出的引用绑定,它不能改变指针变量可以在程序后面指向新变量的位置。
在 C 中,我们只有指针和值变量,而在 C++ 中,我们有指针、引用和值变量。在我的链接答案中,我试图解释指针和引用变量之间的区别。
两者都不正确。
当你声明一个指针时,你给它分配了一个变量的地址。你正在尝试相反的方式。正确的方法是:
int x,*ra;
ra = &x;
这两个原因,以你在问题中的方式,未定义的行为。
首先,您不初始化指针,这意味着它指向一个随机位置(或者NULL
如果变量是全局的)。
对于第二个,您尝试更改变量所在的地址,这(如果它甚至可以编译)是不允许的。
这是一些带注释的代码:
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
这是我的 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;
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.