关于指针的思考与理解

关于指向指针的指针:

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值