首页 > 代码库 > 指针和引用
指针和引用
code:
int a = 5;
int *p = &a;
printf("%d \n", p);
printf("%d", *p);
result:
printf("%d \n", p)输出的是a的地址
printf("%d", *p)输出的是a值
code:
int a = 5;
int *p = &a;
printf("%d \n", p);
printf("%d \n", *p);
int c = sizeof(a);
int &b = a;
int d = sizeof(b);
int e = sizeof(&b);
int f = sizeof(p);
int g = sizeof(*p);
printf("%d \n", &b);
result:
a 5 int
+ &a 0x0016fca0 int *
c 4 int //sizeof(a), a是整形的数据,占4个字节,所以是4
b 5 int & //b就是a, a = 5,故为5
d 4 int //b就是a,sizeof(b)等同sizeof(a),所以是4
e 4 int //&b就是a的地址,同样占4个字节,所以是4
f 4 int //a的地址,同样4个字节,所以是4
g 4 int //指针是int类型,占4个字节,所以是4
printf("%d \n", &b)输出的是a的地址
引用只是让变量多了一个名称(就好像同一个人有不同的称呼)
变量的特点:
1.名称
2.类型,告诉编译器用多大内存来存储
3.值
4.地址
int a = 5;
这句干了什么:1.定义变量a;
2.变量为整形数据,占4个字节
3.变量值为5
int *p = &a;
这句干了什么:1.定义变量p;
2.变量p是指针;
3.指针变量是指向一个整形的数据;
4.指针变量的值是&a;
指针p是变量,它有自己的地址
&*p:*p = a,所以&*p相当于&a
*&p:&p指向的数,也就是p本身,即a的地址
如此*&p = p
**P:*p是p指向的数据,而在上面已经对p进行了赋值,所以*p可以准确的找到所指向的数值;
那么**p是指*p所指向的数据,通过上面知道*p是5,即在地址为5的内存里数据,显然这是有问题的
指针和引用