因此,这里是一个锻炼和,给出以下解决方案:了解指针和地址引用用C
假设下面的声明已经做出:
char c = ‘A’;
char *p = &c;
char **p2 = &p;
void *v = &p2;
检查每个以下表达式。如果该表达式是非法的,写入ILLEGAL。如果表达式是合法的,请写下它的类型(即int,void *等)
&p2 : char***
*p2: char*
&v: char****
p2 + 1: char**
v[0]: Illegal
您能解释我们如何得到这样的类型吗?我知道v [0]是非法的,因为v指向地址,我们不能像使用数组那样使用括号表示来访问它。 但所有其他让我有点困惑,尤其是1-3。
我很乐意帮忙!
>我们不能使用括号表示来访问 - 为什么不呢? v [0] == *(v + 0)。 – someuser 2014-10-30 04:02:12
实际上,'v [0]'是不合法的,因为'v'是一个指向'void'的指针,并且'void'的指针可能不会被解引用。要引用K&R,“无效对象的(不存在)值可能不会以任何方式使用......” – user3386109 2014-10-30 04:04:46
@ user3386109,通常我们可以使用这个表示法来访问 - 这就是我想说的。 – someuser 2014-10-30 04:07:00