印度小哥讲解的指针, 真的很好, 这个附上链接:
https://www.bilibili.com/video/BV1bo4y1Z7xf/?spm_id_from=333.999.0.0
1. 指针代码
#include <stdio.h>
int main() {
int a;
int* p;
a = 10;
p = &a; //p中存放的是a的地址.
printf("%p\n", p); // 这里打印的是p中存放的地址, 也就是“a”的地址.
printf("%d\n", *p); // 这里打印的是“p”中地址指向的“a”的值.
printf("%p\n", &a); // 这里打印的是“a”的地址.
}
2. 指针的数学运算
下面这段代码说明了对应的 指针变量
进行相加减都是按照自己的方式进行的,
比如:指针变量是 int类型, double类型
, 这样对应的 + 1, - 1
都是对应的
int, double
类型变量的大小:4字节, 8字节
.
其实从这里也能看出来, 这里的指针变量中, 存储的还是一个“抽象的地址(地址的抽象)”,
不然对应的地址 + 1
, 应该是真实的地址 + 1
, 而不是“加上一个对应的数据类型的值”.
int main() {
int a;
int* p;
a = 10;
p = &a;
printf("p的地址是:%p\n", p);
printf("p的值是:%d\n", *p);
int b = 20;
*p = b; // 这段操作表示实现了将“a”的值修改为20, 但是“p”存储的地址还是“a”.
printf("p的地址是:%p\n", p);
printf("p的值是:%d\n", *p);
}
int main() {
int a = 10;
int* p = &a;
printf("p中存储的地址为:%p\n", p);
printf("一个整型变量占据的字节大小为:%zu\n", sizeof(int));
printf("(p + 1)中存储的地址为:%p\n", p + 1);
printf("p中存储的地址所指向的值为:%d\n", *p);
printf("(p + 1)中存储的地址所指向的值为:%d\n\n\n", *(p + 1));
double b = 32.32;
double* pb = &b;
printf("pb中存储的地址为:%p\n", pb);
printf("一个双精度浮点型变量占据的字节大小为:%zu\n", sizeof(double));
printf("(pb + 1)中存储的地址为:%p\n", pb + 1);
printf("pb中存储的地址所指向的值为:%lf\n", *pb);
printf("(pb + 1)中存储的地址所指向的值为:%lf\n", *(pb + 1));
return 0;
}