文章目录
- 指针入门
-
- [1. 基本介绍](#1. 基本介绍)
- [2. 指针应用案例](#2. 指针应用案例)
指针入门
1. 基本介绍
- 简单的说 指针表示一个地址(存放的是地址),举例说明:
c
#include<stdio.h>
void main(){
int num = 1;
//num的地址是多少
//1.如果要输出一个变量的地址,使用格式:%p
//2.&num表示取出num这个变量的地址
printf("num的值=%d num的地址=%p",num,&num);
getchar();
}


c
// 1.int * 表示类型为 指针类型(指向一个int类型的指针)
// 2.名称 ptr ,ptr就是一个 int * 类型
// 3.ptr指向了一个int类型的变量地址
int *ptr = #
//指针变量,本身也有地址
printf("ptr的地址是%p",&ptr);
printf("num的值=%d num的地址=%p",num,&num)

ptr是通过本身存放的一个地址指向了另外一个变量的地址

c
printf("\n ptr的地址是%p ptr存放的值是一个地址为%p",&ptr,ptr);
ptr存放的地址其实就是num变量的地址- 指针变量,存放的地址 ptr

- 获取指针指向的值
*ptr
c
printf("\n num的值=%d num的地址=%p ptr指向的值=%d",num,&num,*ptr);

2. 指针应用案例
- 写一个程序,获取一个
int变量num的地址,并显示到终端将num的地址赋给指针ptr, 并通过ptr去修改num的值.并画出案例的内存布局图。
- 代码实现
c
#include <stdio.h>
int main() {
// 1. 定义一个 int 变量 num
int num = 10;
// 2. 定义一个指向 int 的指针 ptr,并获取 num 的地址赋给它
int *ptr = #
// 打印初始状态
printf("修改前:\n");
printf("num 的值: %d\n", num);
printf("num 的地址 (&num): %p\n", (void*)&num);
printf("ptr 存储的地址: %p\n\n", (void*)ptr);
// 3. 通过指针 ptr 修改 num 的值
*ptr = 100;
// 打印修改后的状态
printf("修改后:\n");
printf("num 的值 (通过 *ptr 修改后): %d\n", num);
printf("*ptr 的值: %d\n", *ptr);
return 0;
}

- 内存布局图解
在内存中,变量 num 占用一块空间,而指针 ptr 占用另一块空间,其内容是 num 的起始地址。
- 详细布局说明:
| 变量名 | 内存地址 (示例) | 存储的内容 | 说明 |
|---|---|---|---|
| num | 0x7ffee1234568 |
100 |
存储实际的整数值 |
| ptr | 0x7ffee1234570 |
0x7ffee1234568 |
存储了 num 的内存地址 |
关键点总结:
&num:取址符,获取变量在内存中的"门牌号"。int \*ptr:声明一个指针变量,专门用来装"门牌号"。\*ptr:解引用符,代表"前往ptr指向的地址,并操作那里的内容"。
-
核心原理解析
- 关联阶段 :执行
ptr = #后,指针ptr指向了num所在的内存单元。 - 间接访问阶段 :执行
*ptr = 100;时,CPU 不直接去改num,而是先查看ptr里存的地址,然后顺着这个地址找到num的内存位置,将其中的数值从10覆盖为100。
- 关联阶段 :执行