Question: I am reading a book called C for Java Programmers. 
It gives an example about nameless structs that I do not undestand.
It says that this is valid:

```
struct{
 int val1, val2;
 double val3;
} s1,s2;

  s1.val1 = 5;
  s2.val3 = 4.6;

```

If structs are similar to objects in Java, why can't I just say val1 = 5 and val2 = 4.6?
What is the point of s1 and s2?

Thanks

Answer: 
`struct`s are similar to classes in the sense that you can view the members of a `struct` as public fields of a class. Because this struct has no name you only have the instances at the end of the `struct`'s declaration (`s1` and `s2`) because you'd need the `struct`'s name to make instances in other places.

In order to assign values to the members of the instances you need to access them through the instance (`s1` or `s2`). 

You can compare it with the following Java scenario: you have a class with three public fields: `val1`, `val2` and `val3` and you have two instances of your class: `s1` and `s2`. In order to assign values to your instances you need to access the members through the instances: 

```
s1.val1 = 5;
s2.val3 = 3.14;

```

The fact that the `struct` is nameless only means that you can't make other instances besides the ones at the end of the declaration, but has no effect on how you access the members of instances.
A `struct` in C is like an object in Java. But C has no classes, so there really isn't a need to name the type. I.e., you could say:

```
struct something {
   int a, b;
   double c;
};

```

and later say:

```
struct something s1, s2;

s1.a = 42;
s1.c = 2.14;
s2 = s1;

```

In the common case that you only define a few objects of that type, it may remain nameless (as in your snippet). The members `a`, `b`, `c` of `s1` and `s2` are different, just like if you have several objects of the same type in Java their members are separate values.