C语言指针数组实际应用(嵌入式)

C语言指针数组详细学习

指针是C语言中非常重要的概念之一,它可以让我们直接访问内存中的数据。指针数组则是由多个指针组成的数组,每个指针都可以指向内存中的某个位置。以下是一些指针数组的实际代码应用:

字符串数组

char* names[] = {"Alice", "Bob", "Charlie"};

for (int i = 0; i < 3; i++) {
    printf("%s\\n", names[i]);
}

上述代码定义了一个字符串指针数组,其中每个指针都指向一个字符串常量。我们可以使用一个for循环遍历整个数组并打印出每个字符串。

函数指针数组

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int multiply(int a, int b) {
    return a * b;
}

int (*operations[3])(int, int) = {add, subtract, multiply};

int result = operations[0](3, 4); // result = 7

上述代码定义了一个函数指针数组,其中每个指针都指向一个接受两个int参数并返回int类型的函数。我们可以使用这个数组来动态选择要调用的函数。

指针数组作为结构体成员

typedef struct {
    char* name;
    int age;
} Person;

Person people[3] = {
    {"Alice", 20},
    {"Bob", 25},
    {"Charlie", 30}
};

char* names[3] = {"Alice", "Bob", "Charlie"};

for (int i = 0; i < 3; i++) {
    people[i].name = names[i];
    printf("%s is %d years old\\n", people[i].name, people[i].age);
}

上述代码定义了一个包含指针数组成员的结构体。我们可以使用一个for循环遍历整个数组,并将每个Person对象的name成员指向一个字符串常量。

以上是一些指针数组的实际代码应用,希望对大家有所帮助。

在嵌入式开发中,C语言数组的应用非常广泛。

以下是一些嵌入式开发中常见的数组应用场景,以及相应的代码实例。

存储传感器数据

在嵌入式系统中,经常需要使用传感器来采集数据。我们可以使用数组来存储传感器采集到的数据,然后进行相应的处理。例如,以下代码演示了如何使用数组来存储温度传感器采集到的数据,并计算出平均值。

#define NUM_SAMPLES 10

int temperature[NUM_SAMPLES] = {25, 26, 27, 28, 29, 30, 31, 32, 33, 34};

int sum = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {
    sum += temperature[i];
}

int average = sum / NUM_SAMPLES;

存储配置信息

在嵌入式系统中,经常需要存储一些配置信息,例如网络地址、端口号、设备ID等等。我们可以使用数组来存储这些信息。例如,以下代码演示了如何使用数组来存储网络地址信息。

#define IP_ADDRESS_LENGTH 4

unsigned char ip_address[IP_ADDRESS_LENGTH] = {192, 168, 1, 100};

存储字符数据

在嵌入式系统中,经常需要处理字符数据。我们可以使用字符数组来存储字符数据,并进行相应的处理。例如,以下代码演示了如何使用字符数组来存储一个字符串,并将其打印出来。

char message[] = "Hello, world!";
printf("%s\\n", message);

以下是一个使用指针在C语言中实现串口发送数据的示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

#define SERIAL_PORT "/dev/ttyUSB0" // 串口设备文件路径
#define BAUD_RATE B9600 // 串口波特率

int main() {
    int fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY); // 打开串口设备文件
    if (fd == -1) {
        perror("open");
        exit(1);
    }

    struct termios options; // 串口选项
    tcgetattr(fd, &options); // 获取当前的串口选项
    cfsetispeed(&options, BAUD_RATE); // 设置输入波特率
    cfsetospeed(&options, BAUD_RATE); // 设置输出波特率
    options.c_cflag |= (CLOCAL | CREAD); // 必须设置的选项
    options.c_cflag &= ~PARENB; // 禁用奇偶校验
    options.c_cflag &= ~CSTOPB; // 设置停止位为1
    options.c_cflag &= ~CSIZE; // 清除字符长度选项
    options.c_cflag |= CS8; // 设置字符长度为8位
    options.c_cc[VTIME] = 0; // 设置读取超时时间
    options.c_cc[VMIN] = 1; // 设置读取最小字节数

    tcsetattr(fd, TCSANOW, &options); // 设置新的串口选项

    char message[] = "Hello, world!"; // 要发送的数据
    int length = strlen(message); // 数据长度

    int bytes_written = write(fd, message, length); // 发送数据
    if (bytes_written == -1) {
        perror("write");
        exit(1);
    }

    close(fd); // 关闭串口设备文件

    return 0;
}

上述代码使用Linux系统的termios库设置了串口的各种选项,并使用write函数发送了一条消息。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯烟火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值