关于指向指针的指针:
#include <stdio.h>
#include <stdlib.h>
/*指针是一个变量,这个变量有地址,但没有内存,他唯一能存储的数据就是地址,相当于他的门牌号码。*/
/*解引用实际上就是找到他所指向的那个变量*/
int main() {
int a = 5;
int *p = &a;
int **pp = &p;
printf("1 %p\n", &a);
printf("2 %p\n", p);
printf("3 %p\n", &p);
printf("4 %p\n", *pp);
printf("5 %p\n", &*pp);
printf("6 %p\n", pp);
printf("7 %p\n", &pp);
}
the answer:
1 0x7fff5fbff7fc
2 0x7fff5fbff7fc
3 0x7fff5fbff7f0
4 0x7fff5fbff7fc
5 0x7fff5fbff7f0
6 0x7fff5fbff7f0
7 0x7fff5fbff7e8
Program ended with exit code: 0
关于const位置的思考:
const *p 基本可以认为没什么用,虽然直接改变指针p的指向会报错以外,但是可以间接改变p的地址从而改变p的实际指向。
* const p就基本上锁定了指针p的指向,虽然可以改变指针的指向来改变他的值,但根本上p仍然指向第一个指向的变量。
#include <stdio.h>
int main() {
int a = 4;
int b = 3;
int * const p = &a;
/*p的门牌不可改变,也就是说p的门牌号码永远是a的地址,
就算改变指针p的指向,也只是取出b变量中的值,
并不是让p的门牌改变。
一旦a的变量改变,*p仍然会等于a;*/
printf("the address of p: %p\n", &p);
printf("the address of b: %p\n", &b);
printf("the address of a: %p\n", &a);
printf("the number of p's door: %p\n", p);
*p = b;
printf("the number of *p: %d\n", *p);
b = 5;
printf("%d\n", *p);
a = 6;
printf("the number of *p: %d\n", *p);
printf("the second occasion:\n");
int const *pp = &a;
printf("%p\n", &a);
printf("%p\n", &b);
printf("%p\n", pp);
pp = &b;
printf("%p\n", pp);
printf("%d\n", *pp);
//*pp = b; error!!
}
the address of p: 0x7fff5fbff820
the address of b: 0x7fff5fbff828
the address of a: 0x7fff5fbff82c
the number of p's door: 0x7fff5fbff82c
the number of *p: 3
3
the number of *p: 6
the second occasion:
0x7fff5fbff82c
0x7fff5fbff828
0x7fff5fbff82c
0x7fff5fbff828
6
6
Program ended with exit code: 0