诠释的地址是一种原始,基元是存储在内存中的数据。每个数据块都被设置在一个特定的存储器块中,这些块具有引用它们的“存储器地址”。
如果定义int i = 1
计算机分配在存储器中的整数(在一个块中,与存储器地址FE 0xF00000)和当引用该整数作为i
,正在访问所存储的值将其值设置为1。 在0xF00000中,碰巧是1
。
在C中,您还可以通过在&(与符号)前加上i
引用(它分配的内存地址),通过这样做,您将获得变量的内存地址而不是其值。
i === 1; // true
&i === 1; //false
&i === 0xF00000; //true
该内存地址可以分配给一个指针(一个变量,“点”到一个内存地址,从而,有没有它自己的价值),所以它可以直接访问过dereferencing it这样你就可以收集值在那个内存块里面。这是使用*
int i = 1; //this allocates the
int *ptr = &i; //defines a pointer that points to i address
/* now this works cause i is a primitive */
printf("%d", i);
/* this works also cause ptr is dereferenced, returning the
value from the address it points, in this case, i's value */
printf("%d", *ptr);
在您的例子来实现,要传递一个参考的printf(printf的请求的值,并接收内存地址),所以它不工作。
希望这有助于你了解C和指针更好
之前'sum'取出和,因为你想给printf的价值,而不是价值 – Ctx
欢迎StackOverflow上的地址。 请参考[游览], 学习问好问题stackoverflow.com/help/how-to-ask, 做个[mcve]。 – Yunnosch
您将'scanf'与'printf'混淆在一起... – LPs