哪个是合法 不合法的呢 求解析

7.经过下列的语句int j,a[10],*p;定义后,下列语句中合法的是( )
A. p=p+2;

B. p=a[5];

C. p=a[2]+2;

D. p=&(j+2);

答案选A
A. p=p+2;
解释如下:
首先先定义了指向整型数据的指针p
此处指针p用于存储整型数据的地址
p = p + 2
就是将p所存的地址加2 再赋值给p,完全是可以的。

如有帮助,还请帮忙点下采纳!感谢!

这里唯一能编译过的是A,但是A也没有实际意义,严格来说也不算正确的用法,你确定你没有漏掉什么吗?

我怎么感觉都不对,并且编译器上实际测试了一下
*P是一个指针,指针指向的是对象的地址,赋值要用一个变量的地址喽。
对于A来说,p如果没有初始化的话,就不对,但是如果p初始化过,这种操作是对的
对于B来说,a[5]实际上是一个变量了,不是地址,给前面加&应该能对
对于C来说,同样的,不合理 a[2]是个变量,变量+2还是变量,赋给指针是不对的,如果把a[2]前面加个取地址&,然后给+2这个也是可以的
对于d来说,j是一个没有初始化的变量,但是j+2就成一个常量了,给常量前面加&,是不是不对啊,编译都不过

迷之操作😂