【c/c++】指针例图基础详解

指针变量内存

int main(){
    // 各类型变量占字节数
    printf("char:   %d\n",sizeof(char));	// 1
    printf("short:  %d\n",sizeof(short));	// 2
    printf("int:    %d\n",sizeof(int));		// 4
    printf("float:  %d\n",sizeof(float));	// 4
    printf("double: %d\n",sizeof(double));	// 8

    printf("\n");

    // 各类型指针变量(不论几级指针)占8字节(64位系统)
    printf("char*:  %d\n",sizeof(char*));
    printf("short*: %d\n",sizeof(short*));
    printf("int*:   %d\n",sizeof(int*));
    printf("float*: %d\n",sizeof(float*));
    printf("double*:%d\n",sizeof(double*));
    
    // 各类型指针变量(不论几级指针)占4字节(32位系统)
    
    return 0;
}

指针详解

&:取地址
*:解引用(指向值)

例1

在计算机内存中,变量的内存基本上都由一段连续的内存空间组成,所以变量的地址指开辟空间的首地址

int main() {
    int a = 10;
    // 指针==地址
    int *p = &a;    // p 指针变量
    printf("*p->  %d\n", *p);
    return 0;
}

在这里插入图片描述

在这里插入图片描述

例2

在计算机内存中,肯定不会有图例的箭头,所以*p就代表指向的内容

int main() {
    int a = 10;
    int b = 20;
    
    int *p = NULL;
    int **s = NULL;
    
    p = &a;
    s = &p;
    
    return 0;
}

在这里插入图片描述

练习&答案解析

请依次写出执行语句1和语句2后&p*pp**s*s&ss的值

int main() {
    int a = 10;	// 已知--&a:0xed209ffa94
    int b = 20;	// 已知--&b:0xed209ffa90
    int *p = NULL;
    int **s = NULL;
    p = &a;	// 已知--&p:0xed209ffa88
    s = &p;	// 已知--&s:0xed209ffa98

    *p = 100;	// 语句1
    *s = &b;	// 语句2
    
    return 0;
}

答案&解析:

1.执行完*p = 100
&p :0xed209ffa88——指针变量p的地址
*p :100——语句1相当于执行a=100,改变了a的值,*p就是a
p : &a 或 0xed209ffa94——变量a的地址 赋值给 指针变量p自身的值

&s :0xed209ffa98——指针变量s的地址
*s :&a 或 0xed209ffa94——指针变量p自身的值,变量a的地址
**s:100——**s相当于*p,执行了语句1之后,*p=100,所以**s=100
s :0xed209ffa88

2.执行完*s = &b
&s :0xed209ffa98——指针变量p的地址
*s : &b 或 0xed209ffa90——执行了语句2之后,变量b的地址 赋值给 指针变量s指向的值*s相当于指针变量p自身的值,所以相当于让指针变量p指向变量b,相当于p=&b,相当于*p=20
**s :20——**s相当于*p,指针变量p指向的值,由上面*s的解析内容可得
s : &p 或 0xed209ffa88——指针变量p的地址 赋值给 指针变量s自身的值

&p :0xed209ffa88——指针变量p的地址
*p :20——根据上面*s的解析内容可得
p : &b 或 0xed209ffa90——根据上面*s的解析内容可得

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆浆两块钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值