海量编程文章、技术教程与实战案例

网站首页 > 技术文章 正文

STM32-详解C语言数组指针比较字符串原理

yimeika 2025-06-25 20:21:25 技术文章 1 ℃

代码原理解析

这段代码实现了一个名为 Buffercmp 的函数,用于比较两个 uint32_t 类型数组(通过指针操作)的内容是否相等,核心逻辑基于指针遍历和逐元素比较 :

  1. 函数参数: const uint32_t* pBuffer:指向第一个待比较数据缓冲区的指针,const 修饰表明在函数内不会通过该指针修改其指向的数据,保证数据源的只读性。 uint32_t* pBuffer1:指向第二个待比较数据缓冲区的指针,可通过该指针遍历数据。 uint16_t BufferLength:表示要比较的数据元素个数,决定循环执行次数。
  2. 循环逻辑:while(BufferLength--) 是一个先判断再自减的循环,每次循环先检查 BufferLength 是否大于 0(执行判断后 BufferLength 的值会减 1 ),只要大于 0 就执行循环体内容。
  3. 比较操作:if(*pBuffer != *pBuffer1) 解引用两个指针,获取它们当前指向的 uint32_t 类型数据并比较。若不相等,函数返回 FAILED,表示两个缓冲区内容不一致;若相等,继续执行后续指针移动操作。
  4. 指针移动pBuffer++ 和 pBuffer1++ 使两个指针分别向后移动一个 uint32_t 类型数据的长度(因指针类型是 uint32_t* ,移动步长由类型决定,通常为 4 字节,具体取决于系统环境 ),指向下一个要比较的数据元素,为下一轮循环做准备。
  5. 返回结果:当循环正常结束(即所有 BufferLength 个元素都比较完毕且都相等 ),函数返回 PASSED,表示两个缓冲区内容一致。

应用方法

应用场景

  • 数据校验:在通信协议处理中,接收端收到数据后,可与本地存储的预期数据缓冲区用该函数比较,判断数据传输是否出错(如串口通信、网络 socket 数据接收校验 )。
  • 内存数据一致性检查:系统中不同模块共享数据或对同一数据做不同处理后,用此函数对比处理前后或不同模块缓存的数据是否一致,排查逻辑错误。
  • 测试用例验证:编写单元测试时,将函数处理后的输出数据缓冲区与预期结果缓冲区比较,验证函数功能是否正确。

使用示例(以简单的裸机环境或嵌入式工程为例,假设相关类型和返回值已定义 )

c

运行

// 假设已定义相关类型和返回值
typedef enum {
    FAILED = 0,
    PASSED = 1
} TestStatus;

#include <stdint.h>
#include <stdio.h>

TestStatus Buffercmp(const uint32_t* pBuffer, uint32_t* pBuffer1, uint16_t BufferLength) {
    while(BufferLength--) {
        if(*pBuffer != *pBuffer1) {
            return FAILED;
        }
        pBuffer++;
        pBuffer1++;
    }
    return PASSED;
}

int main() {
    uint32_t buffer1[] = {1, 2, 3, 4};
    uint32_t buffer2[] = {1, 2, 3, 4};
    uint32_t buffer3[] = {1, 2, 4, 4};
    uint16_t len = 4;

    TestStatus result1 = Buffercmp(buffer1, buffer2, len);
    if (result1 == PASSED) {
        printf("buffer1 and buffer2 are the same.\n");
    } else {
        printf("buffer1 and buffer2 are different.\n");
    }

    TestStatus result2 = Buffercmp(buffer1, buffer3, len);
    if (result2 == PASSED) {
        printf("buffer1 and buffer3 are the same.\n");
    } else {
        printf("buffer1 and buffer3 are different.\n");
    }

    return 0;
}

在上述示例中:

  • 先定义了 TestStatus 枚举类型表示比较结果。
  • main 函数里创建了三个 uint32_t 数组,调用 Buffercmp 函数分别比较 buffer1 与 buffer2、buffer1 与 buffer3 的内容,根据返回结果打印对应的比较结论 。
  • 指针移动 P++ 先移动指针指向的数据,再使用*P 指向指针的数据获取数据

Tags:

最近发表
标签列表