C语言中 指针变量 取地址符&的用法 *指针变量名的用法

文章目录

总结

众所周知,内存可以看成一个一个相邻的格子(类比Excel),而数据就存储于这些格子之中(size大的变量占用格子数多,size小就占用小)。而每个格子都有自己的地址,即内存地址(类似于一条街上相邻的房间都有自己的门牌号,餐厅相邻的包厢也有自己的编号)。

  • 什么是指针变量?指针变量是一类特殊的变量,它用于存储的值是什么?是一个内存地址,是某个变量的内存地址
  • 给你一个变量名,如何获取该变量所在的内存地址?要用到取地址符&。举例:int age = 25; &age就可以取到age变量的地址。
  • 给你一个指针变量,如何得到该指针指向的变量的值? 格式:*指针变量即可。

Intro

C语言中有一类特殊的变量:指针变量(pointer variable),用于存储某个变量的内存地址的值
要打印指针变量一般用%p格式符,会打印出该指针变量的值,即一个内存值。

Code

在这里插入图片描述

//  Created by wuyujin1997 on 2023/1/23.
#include <stdio.h>

int main() {

    int age = 25;
    int* p = &age;
    printf("age = %d\n", age);  // 打印一个int变量的值
    printf("&age = %p\n", &age);// 该变量的内存地址。 【&变量名】取到该变所在的内存地址
    printf("p = %x\n", p);      // 打印该指针变量的值。指针变量中存的是特殊类型的值:【某个其他变量的内存地址】。
    printf("*p = %d\n", *p);    // 指针变量p中存着一个内存地址,这个内存地址处的变量的值是多少?
                                // 【*指针变量名  指针变量-->普通变量内存地址-->普通变量的值 】依次取值两次:1. 拿到指针变量中存储的值。2. 以该值为内存地址,取对应内存处的变量的
    
//    age = 25
//    &age = 0x16fdff218
//    p = 6fdff218
//    *p = 25
    
    return 0;
}

图示

想了一下,用 Excel 演示最方便,也比较直观。
假设我用下面的电子表格表示我电脑的内存,其中每个格子就是一个内存单元(假设用每个格子表示1字节,1格子=1字节内存 byte)。

在这里插入图片描述那我的每条程序语句依次都做了什么呢?

  1. int age = 25;

声明了一个int型变量,一个int型变量占用4字节,所以在内存空闲处分配4字节的内存,将值25 写入该段内存。
本次程序运行时,该段内存地址为0x16fdff218

  1. int* p = &age;

声明了一个指针变量(用于存储内存地址值,所以指针变量一般都占8字节)
这个变量存储的值是什么呢?是之前的age变量内存地址
至于本次的指针变量存放于内存的何处(内存地址),不重要,从值也是一个符合规范的随机位置。

  1. printf("age = %d\n", age);

int型变量 age 的值是多少?25

  1. printf("&age = %p\n", &age);

int型变量 age 的内存地址是多少?0x16fdff218

  1. printf("p = %x\n", p);

打印指针变量 p 的值,就是为指针变量 p 分配的那8个字节里存储的值,也即变量 age 的内存地址

  1. printf("*p = %d\n", *p);

给你一个指针变量名,如何获取该指针变量指向的变量的值*p

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值