学习嵌入式day13----指针(一)

前言

指针的学习一共有三个阶段:

一、指针基础:

  • 指针概念
  • 指针变量定义、引用
  • 指针传参

二、指针进阶

  • 指针  +  一维整型数组
  • 指针  +  一维字符型数组

三、指针高阶

  • 指针  +  二维整型数组
  • 指针  +  二位字符型数组
  • 指针的数组:指针 + 函数      指针  +  指针

本篇文章主要介绍指针基础,剩余两个阶段在在后面介绍。

-------------------------------------------------------------------------------------------

指针的基础:

一、指针概念

1、概念

指针(Pointer):是一种特殊的变量,储存了另一个变量的地址,而不是它的值。这个地址可以指向储存在计算机内存中的数据。

指针是一种用于存储其他数据类型变量地址的数据类型:

这个类型指示了指针指向的变量的数据类型。例如,如果定义一个指向整数的指针,它的类型就是 int *;如果是指向字符的指针,类型就是 char *,依此类推。

2、指针的用途

指针的作用和用途:

  • 动态内存分配:指针可以用于在运行时动态分配内存。

  • 传递参数:指针可以用于传递函数参数,通过指针可以直接修改函数外部的变量值,而不是传递变量的副本。

  • 复杂数据结构:指针允许创建和操作复杂的数据结构,如链表、树等,这些结构经常需要动态分配内存和处理不同节点之间的关系。

  • 提高效率:指针允许直接访问和操作内存,因此在某些情况下比直接操作变量更高效。

二、指针变量定义及引用

1、语法

基本类型  *  指针变量名

基本类型:

整型(int)、浮点型(float)、字符型(char)、数组型、指针类型、函数型……

表示:该指针  所指向的内存空间  应该存放什么类型的数据

 * :指针运算符(解引用)

用于声明和操作指针,

例如 int *p (声明了一个指向整数的指针变量p);这个只能取地址,因为指针是储存另一变量的地址的。

例如  * p  (取指针p  所指向地址  的)。

指针变量名

与标识符命名规则一致。

 2、指针的引用

1、* p

含义:p所指向的内存地址的值。通俗来讲就是,p所指向的变量的值。

应用:

int a=10;

int *p=&a            // 定义一个指向整形的指针变量p,把a的首地址赋给p。

如果要修改a的值:

*p=20;   //把20赋给a。

总结 :

指针的作用之一,也是非常重要的一点,就是通过访问地址,直接修改变量的值。

* p 属于间接访问;通过 a 访问的是 直接访问。

3、指针的初始化

指针的初始化有多种形式:

  1. int a=10;  int *p=&a;
  2. int *p= NULL;
  3. int *p; p=NULL;
  4. int a;  int *p; p=&a; 

未初始化的指针可以包含任意的内存地址值,这取决于变量的存储位置和先前存储的内容。因此,使用未初始化的指针进行解引用或其他操作会导致未定义的行为,这可能会引发程序崩溃或产生难以预测的结果。

总之,在声明指针变量时,确保在需要使用之前初始化它。如果不确定是否初始化,始终初始化为 NULL 是一种良好的做法,这样可以在不需要指向特定地址时保持指针处于安全状态。

三、指针传参

我们肯定会有这样一个疑问,为什么要存在指针这种特殊的变量呢?它有什么作用?

答案就是:指针80%的作用就是:被调修改主调。

要实现被调修改主调,就需要指针作为函数参数。

1、被调修改主调的含义

在C语言中,"被调修改主调"通常是指通过函数参数传递指针,使得被调函数可以修改主调函数中的变量的值这种方法允许函数在执行过程中直接访问和修改主调函数中的数据,而不需要通过返回值或全局变量来传递修改后的结果。

具体来说:

  • 指针传递:当你将变量的地址(即指针)传递给函数作为参数时,函数可以通过这个指针间接访问和修改该变量的值。

  • 修改主调函数中的变量:被调函数(也称为子函数或子程序)可以通过操作指针所指向的内存位置来修改主调函数(调用它的函数)中相应变量的值。

举个例子来说:

#include <stdio.h>

void modify(int *p) {
    *p = 20;  // 修改主调函数中变量的值,modify (修改)
}

int main() {
    int num = 10;
    
    printf("Before calling modify: %d\n", num);
    
    modify(&num);  // 将num的地址传递给modify函数
    
    printf("After calling modify: %d\n", num);  // num被修改为20
    
    return 0;
}

2、指针 作为函数参数

  1. 形参:指针类型 变量,用来接收实参(实参是要操作的内存空间的地址)
  2. 实参:要修改谁 就把谁的 地址  传过去

注意:被调函数中一定要有 *p 运算 (间接访问的操作);

    值传递                              //  实参数据 赋值了形参  
   地址(指针)传递                 //传的是地址 --可以实现被调修改主调 

总结

指针的基础,要理解指针的本质,指针p 储存了另一个变量的内存空间的地址,要回正确引用指针,* p是所指向变量的值。然后要理解指针存在的意义,利用指数传参,实现被调修改主调。
 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值