关于”&“的不理解 ?

int i;
int * p;
scanf("%d",&i);
p=&i;

请问c语言中"&"符号执行的操作是什么?只是单纯的把某个变量的地址取出来吗?
如果是的话那 scanf("%d",&i);中的i的值是怎么放进i的空间里的?一定是把控制数据流向i空间的接口打开了 对不对?
如果”&“能把接口打开,那也就意味着p=&i;中的接口也打开了,那p的值就应该是i的值而不是它的地址的值对不对?
如上 两句话是矛盾的
另外还想请教 大 神 解释一下 ”*“是”&“的逆运算 这句话怎么理解?
感谢了

在 C 语言中,"&" 符号用于获取一个变量的地址,即获取变量在内存中的存储位置。在语句 p = &i; 中,"&" 获取了变量 i 的地址,并将其赋值给了指针变量 p,这样 p 就指向了 i 在内存中的位置。

scanf 函数的作用是从标准输入(通常是键盘输入)中读取数据,将读取到的数据存储到指定变量的内存空间中。语句 scanf("%d", &i); 就是将从标准输入中读取一个整数,然后将读取到的值存储到 i 的内存空间中。

"*" 符号在 C 语言中有两个含义。当它用在变量声明中时,表示定义一个指针变量;当它用在指针变量前面时,表示取指针变量所指向的内存空间的值。因此,"p = &i;" 中的 "&" 和 "*p" 是互为逆运算的,它们分别表示获取和取出一个变量的地址和值。

对于你提到的两句话,它们并不矛盾。"&" 符号可以获取变量的地址,但并不会打开任何控制数据流向变量的接口。而在语句 p = &i; 中,因为 p 是一个指针变量,所以它保存的是 i 的地址,而不是 i 的值。因此,"p 的值就应该是 i 的地址的值" 这句话是正确的。

&符号表示取地址
scanf("%d",&i);中的i的值是怎么放进i的空间里的? ---- 这具体你要看scanf的实现代码了。scanf的第二个参数要求是输入变量的地址,因为这个参数是返回参数,所以要取地址,不然输入值无法写到你外部变量i啊。
你想多了,哪有什么接口的事情,就是纯粹获得变量的存储地址而已,有了地址就可以访问变量,并且可以修改这个变量地址的值

&是取址符,scanf("%d",&i);这条语句的是将输入数据放到 &i 这个地址中(&i 是一个地址,它指向进程为i分配的空间,不能说是一个接口,假设i 的地址是 0x0005 那么&i就等价于0x0005)通过地址去访问空间;
p=&i;p是一个指针变量,p中储存的值是一个地址,这句话把 &i 这个地址存到了p变量中,所以指针变量p中储存着 i 的地址