文章目录
- Intro
- Code
- 图示
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)。
那我的每条程序语句依次都做了什么呢?
int age = 25;
分配了一个int型变量,占8 byte,内存的值为25
,分配哪个位置的内存呢?随机(暂时认为是随机的)。
【WPS坏了,我装一个Excel有空再弄吧】
-
int* p = &age;
-
printf("age = %d\n", age);
-
printf("&age = %p\n", &age);
-
printf("p = %x\n", p);
-
printf("*p = %d\n", *p);