我知道->
运算符可以是变量方向的指针,但为什么用它的时候有指针运算符*
,有什么区别,可以吗喜欢一个在另一个?例如:->运算符与指针之间的区别*(C++)
a*b
指是指向B(好吧,我可能是错误的原谅我,因为我是一个初学者?)
是它等同于a->b
?
and a<-b
含义b是指向?
如果是这样,是否有可能依靠->
,因为它更简单?
我知道->
运算符可以是变量方向的指针,但为什么用它的时候有指针运算符*
,有什么区别,可以吗喜欢一个在另一个?例如:->运算符与指针之间的区别*(C++)
a*b
指是指向B(好吧,我可能是错误的原谅我,因为我是一个初学者?)
是它等同于a->b
?
and a<-b
含义b是指向?
如果是这样,是否有可能依靠->
,因为它更简单?
a*b
通常表示“乘以a
和b
”。 C++只有很少的词汇元素,其中很多都有很多不同的用途,所以上下文很重要。
a->b
是成员访问权并对应于(*a).b
,即访问由a
指向的值的b
成员。
请注意,*
和->
运算符都可能被重载。
我打算让它成为* b,例如int a * b –
你的意思是'int a,* b;'? –
@AhmedDhia:C++是空白不敏感的。 –
对我来说,你似乎对指针的功能和*
所属的位置感到困惑。
指针是一种特殊类型的对象,指向另一个对象到,而不是从一个对象。
指针可以声明如下:
int *a;
这里,*
指定a
是一个指针。指针类型与它们指向的对象的类型是不同的类型。
但a
指的是不确定的。您需要指定地址以使a
指向某个东西。
int b = 2;
而让a
点b
:
a = &b;
这里,一元&
运算符用于采取b
的要做到这一点,让我们做一个整数(这里值2
初始化) 地址。然后将其分配给a
,然后a
指向b
。
当然,指针也可以初始化。上面的语句可以更换:
int b = 2;
int *a = &b;
那么,你如何让b
的从a
价值?你可以做到这一点的提领a
:
std::cout << *a << std::endl;
这将打印2
。一元运算符*
在此处用于解除引用a
。这*
是不同于*
以上声明a
并不应该混淆。
++*a;
这增加了b
。 b
现在的值为3
。
可以通过分配另一个地址使a
指向一个不同的对象:
int c = 3;
a = &c;
现在a
点c
,而不是b
。
您可以将指针,这将指向同一个对象复制:
int *d = a;
现在d
点c
,这a
也指出。
参考是从不同的指针:
int &e = b;
&
在这里用来指定e
是一个参考。这&
是不同于&
用于采取地址,不应该混淆。这里,e
是指到b
。
他们指一个对象,就好像它们是该对象总是行动:
++e;
这增加b
。 b
现在的值为4
。
不同于指针引用必须总是指一个对象:
int &f; // error
的参考还可以指一个指针:
int *&g = a;
g
指a
。
但指针不能指向一个参考:
int &*h = &e; // error
非常感谢:)这清楚地表明了一个问题,但是,我如何防止打印内存地址或指针位置的输出? –
你不应该给内存地址输出流。遵循上面的例子,'std :: cout << d << std :: endl'将输出'c'的地址。 –
你似乎误解了什么' - >'手段。它并不意味着任何方向,它只是取消引用指向结构成员访问的结构的指针。对于一个指向结构'a'和成员'b'的指针,表达式'a-> b'等于'(* a).b'。 ***另外***' - >'运算符在C语言(它来自何处)早期意味着其他内容。阅读例如[这个老答案](http://stackoverflow.com/a/13366168/440558)了解更多详情。 –
http://stackoverflow.com/a/6586248/6543574在这里解释,希望帮助:) – Lanfear
'a * b' _never_意味着'a'是指向'b'的指针。最接近的含义是,作为声明的一部分,它意味着'b'是指向'a'的指针(其中'a'是_type_)。在表达式中,'a * b'调用乘法。我的歉意是 – davmac