& 是位操作运算符 *代表指针
在C语言中
&可以用来拿到变量在内存中存储的地址
*可以用来拿到对应地址中的具体内容
比如 :
int a=123;
直接printf printf("a = %d",a); 可以直接获得 打印 123 内容
直接 printf printf("a = %p",&a); 打印的地址是 0x.............一个十六进制的地址
那么我们定义一个指针变量
int *b = NULL;
b = &a; //*b代表指针变量 而 b只能赋值为地址
当我们想要拿到指针 *b 中的内容的时候 printf("%d",*&b); 打印的结果与a变量是一样的
在之前 我们已经把变量a的值赋给了*b
现在 *b的值也就是 123
如果我们对 *b的值进行重新赋值
*b = 512;
那么打印结果
printf("a = %d\n",a);
printf("b = %d\n",*b);
// a = 512 b = 512;
为什么会这样呢?
因为在赋值之后 指针*b 指向 变量a 这个时候 相当于 指针*b直接指向了 a的内存 所以 对指针*b做修改的时候就是对那块内存中的内容进行修改 所以修改了 *b后 变量a中的内容也也会被修改
最终总结我的理解 只有一句话
&是为了拿到变量的内存地址 而 *就是为了拿到对应内存地址中的内容