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
相关推荐
时见先生17 小时前
Python库和conda搭建虚拟环境
开发语言·人工智能·python·自然语言处理·conda
a努力。18 小时前
国家电网Java面试被问:混沌工程在分布式系统中的应用
java·开发语言·数据库·git·mysql·面试·职场和发展
Yvonne爱编码18 小时前
Java 四大内部类全解析:从设计本质到实战应用
java·开发语言·python
wqwqweee18 小时前
Flutter for OpenHarmony 看书管理记录App实战:搜索功能实现
开发语言·javascript·python·flutter·harmonyos
yongui4783418 小时前
基于MATLAB的NALM锁模光纤激光器仿真实现
开发语言·matlab
-To be number.wan19 小时前
Python数据分析:numpy数值计算基础
开发语言·python·数据分析
沃尔特。20 小时前
直流无刷电机FOC控制算法
c语言·stm32·嵌入式硬件·算法
Cx330❀20 小时前
【优选算法必刷100题】第038题(位运算):消失的两个数字
开发语言·c++·算法·leetcode·面试
Loo国昌20 小时前
深入理解 FastAPI:Python高性能API框架的完整指南
开发语言·人工智能·后端·python·langchain·fastapi
hoiii18721 小时前
16APSK/32APSK调制解调MATLAB仿真实现
开发语言·matlab·fpga开发