首页 > 系统相关 >嵌入式Linux系统学习记录10

嵌入式Linux系统学习记录10

时间:2025-01-19 19:58:48浏览次数:3  
标签:10 arr 指向 int 嵌入式 Linux NULL ptr 指针

在 C 语言中,指针是一个非常重要的概念。指针是一个变量,它存储的是另一个变量的内存地址。理解指针的细节和注意事项对于编写高效、稳定的 C 语言程序至关重要。以下是 C 语言中指针的一些细节和注意事项:

1. 指针的定义和初始化

指针是用 * 来声明的,表示指向某种类型的变量。例如:

int *ptr;           // 定义一个指向整数的指针

  • 初始化指针:指针在定义时不初始化时,会指向不确定的地址,可能导致不可预期的行为。可以将其初始化为 NULL,表示指针不指向任何有效的内存位置。

    int *ptr = NULL;       // 初始化指针为 NULL
  • 指向变量的指针

    int a = 10; int *ptr = &a;         // ptr 指向变量 a 的地址

2. 解引用 (Dereferencing)

通过指针访问其指向的内存内容称为解引用。使用 * 操作符来解引用指针:

int a = 10;

int *ptr = &a; // ptr 指向 a 的地址

printf("%d", *ptr); // 解引用 ptr,输出 a 的值,即 10

3. 指针的算术运算

指针不仅可以进行赋值,还可以进行算术运算(加、减、递增、递减)。指针算术操作考虑到指针所指向数据类型的大小。例如:

int arr[] = {10, 20, 30, 40};

int *ptr = arr;                    // ptr 指向 arr[0]

ptr++;                         // 移动到 arr[1]

printf("%d", *ptr);                // 输出 20

  • ptr++ 使得指针向后移动一个元素的位置,指向数组中的下一个元素。

4. 指针与数组

数组名本质上是一个指针常量,指向数组的第一个元素。数组名的使用与指针是密切相关的。它们可以互换使用:

int arr[4] = {1, 2, 3, 4};

int *ptr = arr;               // 等价于 int *ptr = &arr[0];

printf("%d", *(ptr + 2));        // 输出 arr[2],即 3

5. 指针的传递方式

在 C 语言中,函数参数默认是按值传递的。如果想在函数中修改原始变量的值,可以通过指针进行传递。这被称为 按引用传递

void updateValue(int *ptr)

{
    *ptr = 20;                                             // 解引用指针,修改值
}

int main()

{
    int x = 10;
    updateValue(&x);                              // 传递变量 x 的地址
    printf("%d", x);                                  // 输出 20
    return 0;
}
 

6. 指针的空值 (NULL)

空指针 (NULL) 是一个特殊的指针,指向一个无效的内存位置。空指针不能被解引用。使用空指针可以表示指针没有指向有效的内存地址。

int *ptr = NULL;

if (ptr != NULL)

{

printf("%d", *ptr);           // 如果 ptr 不是 NULL,才解引用

}

7. 指针的类型

指针的类型决定了它指向的数据类型。例如,int * 指向一个整数,而 char * 指向一个字符。指针类型和它指向的变量类型必须匹配:

int a = 10;

char b = 'A';

int *ptr1 = &a;        // 正确

char *ptr2 = &a;       // 错误:类型不匹配

注意事项:

  1. 指针的初始化:总是初始化指针,避免野指针的错误。
  2. 避免使用已释放的内存:释放内存后不要再使用该内存,避免出现“悬挂指针”。
  3. 指针越界:访问指针所指向的内存时,确保它指向有效的内存区域,避免访问越界。
  4. NULL 指针检查:在解引用指针之前,应该始终检查指针是否为空。
  5. 指针类型匹配:指针的类型必须与所指向的变量类型相匹配,否则会导致不确定的行为。

总结:

指针是 C 语言中非常强大且复杂的工具,它们让你可以直接操作内存,执行低级的任务。熟悉指针的基本概念和使用方法,避免常见的错误,是掌握 C 语言的关键。

标签:10,arr,指向,int,嵌入式,Linux,NULL,ptr,指针
From: https://blog.csdn.net/hhdk1/article/details/145246674

相关文章

  • 10M或100M带宽的服务器每个月可用的流量是多少?
    选择合适的服务器带宽对于网站的性能和用户体验至关重要。了解不同带宽下的可用流量可以帮助您更好地规划资源,避免因流量不足而导致的服务中断。本文将详细介绍10M和100M带宽服务器每月的理论可用流量,并探讨实际使用中的影响因素。1.理论计算根据带宽和时间的关系,我们可以计算......
  • Mysql 5.7解决windows本地无法开启服务-1067
    出现原因:我切换mysql8服务后,切换回去mysq5.7,然后报下面的问题。删除后应该可以 但是可能因为我有两个服务,一个5.7,一个8.0然后我继续报错:D:\Monkey\mysql-5.7.33-winx64\bin>netstartMySQL57mysql57服务正在启动.mysql57服务无法启动。服务没有报告任何错误。......
  • 基于嵌入式系统的智能豆浆机设计与实现
    引言随着物联网(IoT)技术的快速发展,智能家居设备越来越普及。智能豆浆机作为家庭厨房电器中的一种重要产品,能够自动化地完成豆浆制作过程。与传统豆浆机相比,智能豆浆机不仅具备更加智能的操作体验,还能够通过手机应用进行远程控制,提供更多个性化的功能选择。本文将介绍基于嵌......
  • Linux中RAID级别有哪些?
    RAID(RedundantArrayofIndependentDisks,独立磁盘冗余阵列)是一种将多个磁盘驱动器组合成一个逻辑单元的数据存储虚拟化技术,用于提高数据的可靠性、性能和/或容量。RAID有多种级别,每种级别都有其特定的性能、可靠性和成本效益。以下是一些常见的RAID级别:1.RAID0(条带化)特点:将......
  • 中考英语优秀范文-热点话题-传统文化-010 Mid-Autumn Festival 中秋节
    1写作要求中秋节是我国的传统节日,随着经济的发展和时代的变迁,中秋节依然在我们国人心中有着重要的位置。在中秋节,人们望着天上的明月,守望膜拜,吃着月饼,寄托情怀,这个节日更多地被赋予了思念亲人的色彩,祈求团圆和幸福。过去的中秋节有没有特别让你难忘的事情发生,让你觉得温暖、意义......
  • 我用AI Assistant编写代码,竟完成了100%的Coding工作!还在蒙头敲代码的时代已经过去啦!
    大家好,欢迎来到程序视点!我是小二哥。前言昨天我们详细分享了Cursor、GitHubCopilot和AIAssistant三款AI工具怎么选的问题。今天,我们用AIAssistant来解决下实践中的问题–AIAssistant写代码。这是某高校技能大赛的题目之一。大家自己评估一下,写出这道题需要多久?AI......
  • 还在手动操作Linux?脚本轻松搞定(超全)
    系统设置常用镜像源镜像站地址官方给出的地址列表:https://www.debian.org/mirror/list一些国内的ftp.cn.debian.orgmirror.bjtu.edu.cnmirror.lzu.edu.cnmirror.nju.edu.cnmirrors.163.commirrors.bfsu.edu.cnmirrors.hit.edu.......
  • 嵌入式Linux之基于TCP协议的程序
    一、服务端(single_conn_server.c)#include<sys/socket.h>#include<sys/types.h>#include<netinet/in.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<arpa/inet.h>#include<pthread.h>#incl......
  • 【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-第k个排列100分(python、java、c++、js、c)】题目给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列的情况,并一一标记,当n=3时,所有排列如下:“123”“132”“213”“231”“312”“321”给......
  • 【华为OD-E卷 - 最长连续子序列 100分(python、java、c++、js、c)】
    【华为OD-E卷-最长连续子序列100分(python、java、c++、js、c)】题目有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,如果没有满足要求的序列,返回-1输入描述第一行输入是:N个正整数组成的一个序列第二行输入是:给定......