前言:
本文乃大一初学时写作,现在已经毕业两年多换方向了,成了前端码农,真正底层原理我现在也忘光光了,建议大家多看看多研究其他大佬的分析,别全听信本文。(也别因为这篇文章关注我了)
指针变量用来存放指针(或者可以理解成地址)。而 & 则是取地址运算符,因此给指针变量赋值的方式一般是把变量的地址取出来,然后付给对应类型的指针变量:
int a;
int* p = &a;
上面的代码也可以写成:
int a;
int* p;
p = &a;
需要注意的是, int* 是指针变量的类型,而后面的 p 才是变量名,用来存储地址,因此地址 &a 是赋值给 p 而不是 *p 的。
所以,int *p中的 p 必须赋予一个地址,如果不是地址,编译器则会报错(实在不能理解的话就把地址当做一个新的类型,类型不同肯定会报错嘛 ╮( ̄▽ ̄)╭)
当然,如果 a 代表的是数组首地址,那就另说了。下面几个例子方便理解:
int *p=a;
#include <stdio.h>
int main() {
int a = 123;
int *p=a;
printf("%d\n", p);
return 0;
}
编译结果:
int *p=&a;
#include <stdio.h>
int main() {
int a = 123;
int *p=&a;
printf("%d\n", *p);
return 0;
}
结果:
a为数组首地址时
#include <stdio.h>
int main() {
int a[3] = {1,2,3};
int *p=a;
printf("%d\n", *p); //输出 a[0]
return 0;
}
结果: