据我所知,只有C ++可以使用类(obj->某些东西)但是我在很多C应用程序中看到过这个运算符。
还有一个小问题。通常使用C中的结构,如下所示:
structname.somevariable
但是我看到他们用过:
structname.something1.something2
是否与关键字union有关?
答案 0 :(得分:7)
struct A
{
int b;
};
struct A *a;
a->b == (*a).b;
不,这与工会无关。它只是成为会员的一员。
答案 1 :(得分:5)
如果你有一个指向struct对象的指针,比如
struct P * p;
您使用->
p->member
如果p不是指针,则使用.
struct P p;
p.member
任何 C书都涵盖了这一点:P
答案 2 :(得分:2)
运算符->
用于通过指向该结构的指针访问struct
的成员。在访问嵌套结构时使用问题的第二部分,它不限于使用联合。例如:
struct A {
int a;
};
struct B {
struct A baz;
};
int main()
{
struct A foo;
struct B bar;
(&foo)->a = 10;
bar.baz.a = 20;
return 0;
}
答案 3 :(得分:0)
C ++ class
es是C struct
的扩展,而对象只是指向struct
的指针。 C ++实际上并没有发明很多新东西;因为某种原因,它被称为C ++ 。
struct
可以嵌套。给定
struct a {
int a_a;
int a_b;
}
struct b {
int b_a;
struct a b_b;
} a;
您可以参考a.b_b.a_b
。
union
使用与struct
类似的语法,但所有成员互相重叠。当您需要以多种方式解释一块内存时,这非常有用。
我强烈建议你拿一本C书。
答案 4 :(得分:0)
x.y.z。
typedef struct _POINT
{
int x;
int y;
} POINT;
typedef struct _RECT
{
POINT topLeft;
POINT bottomRight;
} RECT;
int main()
{
RECT r;
r.topLeft.x = 0;
t.topLeft.y = 0;
int width = r.bottomRight.x - r.topLeft.x;
}
答案 5 :(得分:0)
我在C中写了一个小例子。
#include <stdio.h>
#include <stdlib.h>
struct a_t {
int a;
/* ... */
};
struct b_t {
struct a_t a;
/* ... */
};
int main()
{
struct a_t a;
struct a_t *b;
b = malloc(sizeof(struct a_t));
a.a = 1;
b->a = 2;
printf("%d; %d;\n", a.a, b->a);
(&a)->a = 3;
(*b).a = 4;
printf("%d; %d;\n", a.a, b->a);
free(b);
struct b_t c;
c.a.a = 5;
printf("%d;\n", c.a.a);
return 0;
}
答案 6 :(得分:0)
如果我没记错的话,在C ++中
class IDENTIFIER {
// stuff, possibly including functions
};
完全与
相同struct IDENTIFIER {
private:
// stuff, possibly including functions
};
和
struct IDENTIFIER {
// stuff, possibly including functions
};
完全与
相同class IDENTIFIER {
public:
// stuff, possibly including functions
};