指针其实就是内存地址。在C/C++ 或者golang中会经常用到。用一张图来了解其中的原理吧。
正常的变量都是有内存地址的,可以理解为2部分: 值 + 内存地址
var => 值 :20 内存地址:x0001 (&var)
ip => 值:x00021(声明的时候会给一个默认的) 内存地址:x0002 (&ip)
蒋 var 的内存地址赋值给 ip
ip = &var 后 : ip 的值 x0001 内存地址 : x0002
*ip 就是 *x0001 可以理解为:内存中寻找地址等于: x0001 的
- #include <stdio.h>
-
- int main ()
- {
- int var = 20; /* 实际变量的声明 */
- int *ip; /* 指针变量的声明 */
-
- printf("var 变量的值: %d\n", var );
- printf("&var 变量的值: %p\n", &var );
-
- printf("*ip 变量的值: %d\n", *ip );
- printf("ip 变量的值: %p\n", ip );
- printf("&ip 变量的值: %p\n", &ip );
-
- ip = &var; /* 在指针变量中存储 var 的地址 */
- /* 在指针变量中存储的地址 */
- printf("ip 变量存储的地址: %p\n", ip );
-
- /* 使用指针访问值 */
- printf("*ip 变量的值: %d\n", *ip );
-
- printf("ip => %p",&ip);
- return 0;
- }