arnuld wrote:
1) int i = 3;
2.) int* pi;
3.) int* pi2 = &i
4.) char* pc;
5.) char c;
6) char c2 = 'a'
7.) char* pc2 = &c2
8.) char* ps = "Stroustrou p";
9.) extern double d;
2, 4 & 9 are the only declarations here. right ?
2 and 4 look like definitions to me.
i know that 1, 3, 5, 6, 7, 8 are definitions but can we call them
declarations too?
Yes, the standard defines [3.1/2]:
A declaration is a definition unless it declares a function without
specifying the function?s body (8.4), it contains the extern specifier
(7.1.1) or a linkage-specification (7.5) and neither an initializer nor
a function-body, it declares a static data member in a class declaration
(9.4), it is a class name declaration (9.1), or it is a typedef
declaration (7.1.3), a using-declaration (7.3.3), or a using-directive
(7.3.4).
As you can see, every definition is a declaration.
Is 2 a legal declaration?
Looks legal to me. Did you run it by your compiler?
i dont understand the difference between 7 & 8.
8 is a special case since the right hand side is really const. Usually, when
you define a T*, you are allowed to modify the pointee; and any attempt to
define a T* so that it points to a (an array of) T char should fail. In
order to support C code, there are special provisions for char*.
Best
Kai-Uwe Bux