C语言之指针入门

文章目录

  • 指针入门
    • [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 = &num;

	//指针变量,本身也有地址
	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的值.并画出案例的内存布局图。
  1. 代码实现
c 复制代码
#include <stdio.h>

int main() {
    // 1. 定义一个 int 变量 num
    int num = 10;
    
    // 2. 定义一个指向 int 的指针 ptr,并获取 num 的地址赋给它
    int *ptr = &num;

    // 打印初始状态
    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;
}
  1. 内存布局图解

在内存中,变量 num 占用一块空间,而指针 ptr 占用另一块空间,其内容是 num 的起始地址。

  • 详细布局说明:
变量名 内存地址 (示例) 存储的内容 说明
num 0x7ffee1234568 100 存储实际的整数值
ptr 0x7ffee1234570 0x7ffee1234568 存储了 num 的内存地址

关键点总结:

  • &num:取址符,获取变量在内存中的"门牌号"。
  • int \*ptr:声明一个指针变量,专门用来装"门牌号"。
  • \*ptr :解引用符,代表"前往 ptr 指向的地址,并操作那里的内容"。

  1. 核心原理解析

    1. 关联阶段 :执行 ptr = # 后,指针 ptr 指向了 num 所在的内存单元。
    2. 间接访问阶段 :执行 *ptr = 100; 时,CPU 不直接去改 num,而是先查看 ptr 里存的地址,然后顺着这个地址找到 num 的内存位置,将其中的数值从 10 覆盖为 100。
相关推荐
晓蛋2 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿2 天前
重载、重写(覆盖)、重定义区别
c语言
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
phltxy3 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
phltxy3 天前
C 语言中的数据存储:从类型到二进制位
c语言
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust