当前位置: 首页 > news >正文

C语言:指针

1. 什么是指针?

在C语言中,指针是一个变量,用于存储另一个变量的内存地址。指针不是直接保存值,而是保存数据所在的内存位置。

  • 语法:

    type *pointer_name;

    例如:

    int *ptr;

    在这个例子中,ptr 是一个指向整数(int)的指针。

2. 指针声明

指针必须使用特定的类型进行声明,因为它们是用来指向特定类型的变量。

  • 声明示例:
    int *ptr;     // 指向整数的指针
    char *cptr;   // 指向字符的指针
    float *fptr;  // 指向浮点数的指针

3. 为指针赋值

你可以使用 取地址操作符(& 将指针赋值为一个变量的地址。

  • 示例:
    int x = 10;
    int *ptr = &x;  // ptr 现在保存了 x 的地址
    

4. 解引用指针

解引用是指访问指针所指向的内存地址中的值。使用 解引用操作符(* 来实现。

  • 示例:
    int x = 10;
    int *ptr = &x;
    printf("%d", *ptr);  // 输出:10(x 的值)
    

5. 指针类型

指针与它指向的变量类型密切相关。指针声明时必须指定其类型,因为指针仅能指向指定类型的变量。

  • 示例:
    • int *ptr; 指向一个整数(int)。
    • char *cptr; 指向一个字符(char)。
    • float *fptr; 指向一个浮点数(float)。

6. 空指针

空指针 是指不指向任何有效内存位置的指针。它通常用于指针声明时的初始化,表示指针不指向任何有效的对象。空指针通常用 NULLnullptr 来表示。

  • 示例:

    int *ptr = NULL; // ptr 不指向任何有效的内存

7. 指针运算

指针可以进行算术运算,如递增或递减,因为指针表示内存地址。

  • 指针运算:

    • 递增(++ 会根据指针指向的类型的大小,移动到下一个内存位置。
    • 递减(-- 会根据指针指向的类型的大小,移动到上一个内存位置。
  • 示例:

    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;  // 指向数组的第一个元素printf("%d\n", *ptr);    // 输出:1
    ptr++;                  // 移动到下一个元素
    printf("%d\n", *ptr);    // 输出:2
    

8. 指针与数组

在C语言中,数组名实际上是指向数组第一个元素的指针。你可以通过指针来访问数组元素。

  • 数组和指针:

    • arr 相当于 &arr[0]
    • *(arr + i) 相当于 arr[i]
  • 示例:

    int arr[5] = {10, 20, 30, 40, 50};
    int *ptr = arr;for (int i = 0; i < 5; i++) {printf("%d ", *(ptr + i));  // 输出:10 20 30 40 50
    }
    

9. 指向函数的指针

你可以使用指针来存储一个函数的地址,并通过指针间接调用该函数。

  • 函数指针声明:

    return_type (*pointer_name)(parameter_types);

    • 例如,一个接受 int 类型并返回 void 的函数:

    void (*func_ptr)(int);

 示例:

void greet(int x) {printf("Hello %d\n", x);
}int main() {void (*func_ptr)(int) = greet;func_ptr(5);  // 输出:Hello 5
}

10. 指向结构体的指针

你可以使用指针来访问结构体的成员。通过指针访问成员时使用箭头操作符(->)。

  • 示例:
    struct Person {char name[50];int age;
    };struct Person *ptr;
    struct Person p = {"Alice", 25};
    ptr = &p;printf("Name: %s\n", ptr->name);  // 输出:Alice
    printf("Age: %d\n", ptr->age);    // 输出:25
    

11. 内存分配(动态内存)

C语言提供了 malloc()calloc()realloc()free() 等函数来动态管理内存。

  • 内存分配:

    • malloc(size_t size) 分配内存但不初始化。
    • calloc(size_t num, size_t size) 分配内存并初始化为0。
    • realloc(void *ptr, size_t new_size) 调整已分配内存块的大小。
    • free(void *ptr) 释放已分配的内存。
  • 示例:

    int *arr = (int*)malloc(5 * sizeof(int));  // 为 5 个整数分配内存
    if (arr == NULL) {printf("内存分配失败!\n");return 1;
    }for (int i = 0; i < 5; i++) {arr[i] = i * 2;
    }for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);  // 输出:0 2 4 6 8
    }free(arr);  // 释放已分配的内存
    

12. 指向指针的指针

你可以有一个指向另一个指针的指针,这叫做 指向指针的指针

  • 示例:
    int x = 10;
    int *ptr1 = &x;
    int **ptr2 = &ptr1;  // 指向 ptr1 的指针printf("%d", **ptr2);  // 输出:10
    

13. 常见指针错误

  • 未初始化的指针: 使用未初始化的指针可能导致未定义的行为。
  • 解引用空指针或无效指针: 在解引用指针之前,确保它指向有效的内存位置。
  • 内存泄漏: 使用动态内存时,始终使用 free() 释放内存,以避免内存泄漏。
  • 指针运算错误: 在进行指针运算时,确保不会越界,否则可能会导致段错误(Segmentation Fault)。

总结

指针是C语言中一个强大且重要的概念,它允许你直接访问内存,并且支持动态内存分配和高效的数据操作。正确使用指针可以显著提高代码的性能和灵活性,但需要小心管理,以避免内存泄漏和段错误等问题。

相关文章:

C语言:指针

1. 什么是指针&#xff1f; 在C语言中&#xff0c;指针是一个变量&#xff0c;用于存储另一个变量的内存地址。指针不是直接保存值&#xff0c;而是保存数据所在的内存位置。 语法&#xff1a; type *pointer_name; 例如&#xff1a; int *ptr; 在这个例子中&#xff0c;pt…...

kafka生产者专题(原理+拦截器+序列化+分区+数据可靠+数据去重+事务)

目录 生产者发送数据原理参数说明代码示例&#xff08;同步发送数据&#xff09;代码示例&#xff08;异步&#xff09; 异步和同步的区别同步发送定义与流程特点 异步发送定义与流程特点 异步回调描述代码示例 拦截器描述代码示例 消息序列化描述代码示例&#xff08;自定义序…...

谷歌2025年AI战略与产品线布局

在2024年12月的战略会议上,谷歌高层向员工描绘了2025年的宏伟蓝图,特别是在人工智能(AI)领域。这一年被定位为AI发展的关键转折点,谷歌计划通过一系列新产品和创新来巩固其在全球科技领域的领导地位。本文将深入探讨谷歌的2025年AI战略、重点产品以及竞争策略。 一、整体…...

Kernel Stack栈溢出攻击及保护绕过

前言 本文介绍Linux内核的栈溢出攻击&#xff0c;和内核一些保护的绕过手法&#xff0c;通过一道内核题及其变体从浅入深一步步走进kernel世界。 QWB_2018_core 题目分析 start.sh qemu-system-x86_64 \-m 128M \-kernel ./bzImage \-initrd ./core.cpio \-append "…...

QT-窗口嵌入外部exe

窗口类&#xff1a; #pragma once #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QProcess> #include <QTimer> #include <QDebug> #include <Windows.h> #include <QWindow> #include <…...

38-其他地方使用模式

38-其他地方使用模式 模式除了可以在 match 表达式中使用外&#xff0c;还可以使用在变量定义&#xff08;等号左侧是个模式&#xff09;和 for in 表达式&#xff08;for 关键字和 in 关键字之间是个模式&#xff09;中。 但是&#xff0c;并不是所有的模式都能使用在变量定…...

才气小波与第一性原理

才气小波与第一性原理 才气小波与第一性原理具身智能云藏山鹰类型物热力学第二定律的动力机械外骨骼诠释才气小波导引社会科学概论软凝聚态数学意气实体过程王阳明代数Wangyangmingian王阳明算符才气语料库命运社会科学概论意气实体过程业务分层框架示例 才气小波与第一性原理 …...

104周六复盘 (188)UI

1、早上继续看二手书的一个章节&#xff0c;程序开发流程、引擎、AI等内容&#xff0c; 内容很浅&#xff0c;基本上没啥用&#xff0c;算是复习。 最大感触就是N年前看同类书的里程碑、AI相关章节时&#xff0c;会感觉跟自己没啥关系&#xff0c; 而如今则密切相关&#xf…...

CDP集群安全指南-动态数据加密

[〇]关于本文 集群的动态数据加密主要指的是加密通过网络协议传输的数据&#xff0c;防止数据在传输的过程中被窃取。由于大数据涉及的主机及服务众多。你需要更具集群的实际环境来评估需要为哪些环节实施动态加密。 这里介绍一种通过Cloudera Manager 的Auto-TLS功能来为整个…...

C# 设计模式:装饰器模式与代理模式的区别

C# 设计模式&#xff1a;装饰器模式与代理模式的区别 在软件设计中&#xff0c;装饰器模式&#xff08;Decorator Pattern&#xff09;和代理模式&#xff08;Proxy Pattern&#xff09;都是结构型设计模式&#xff0c;它们的目的都是通过对对象进行包装&#xff0c;来增加或改…...

[深度学习] 大模型学习1-大语言模型基础知识

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一类基于Transformer架构的深度学习模型&#xff0c;主要用于处理与自然语言相关的各种任务。简单来说&#xff0c;当用户输入文本时&#xff0c;模型会生成相应的回复或结果。它能够完成许多任务&…...

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题&#xff0c;不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner&#xff0c;因为这类文章写得好的特别多&#xff0c;本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…...

STM32-笔记34-4G遥控灯

4G接线 一、项目需求 服务器通过4G模块远程遥控开关灯。 二、项目实现 复制项目文件夹38-wifi控制风扇项目 重命名为39-4G遥控点灯 打开项目文件 加载文件 main.c #include "sys.h" #include "delay.h" #include "led.h" #include "ua…...

PHP 使用集合 处理复杂数据 提升开发效率

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

AI代码开发实践-微信小程序开发

接上回&#xff0c;本人参加了一次小孩学校组织的护学岗&#xff0c;萌生了开发一个微信小程序的水印相机的想法&#xff0c;说干就干。 最近也是在学习用AI编程&#xff0c;索性之前也用一点&#xff0c;今天就尝试一下 工具选择&#xff0c;环境搭建 阿里-通义灵码 通义灵…...

【网络安全 | 漏洞挖掘】私有项目中的账户接管过程

未经许可,不得转载。 正文 该程序包含多个通配符目标。在逐一搜索后,我最终发现了一个具有 P4 严重级别的 IDOR 漏洞(不正确的直接对象引用),允许我删除其他用户在帖子中的评论。 其中一个目标是一个只有单个域名的网站,提供注册、登录和重置密码功能。我尝试寻找任何可…...

【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>

前言 大家好吖&#xff0c;欢迎来到 YY 滴算法不挂科系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 一.选择题 【1】算法绪论 1.算法与程序的区别是( ) A.输出 B.输入 C.确定性 D.有穷性 D 2.算法复杂度分析的两种基本方法…...

分布式消息中间件有哪些知名的产品

首先是Apache Kafka&#xff0c;它是一个分布式流处理平台&#xff0c;专注于高性能、低延迟的实时数据管道和流应用。Kafka通过分区和复制机制实现了高可用性和容错性&#xff0c;支持消息的持久化存储和高效的数据传输。其强大的生态系统还提供了丰富的客户端库和集成工具&am…...

kubernets基础入门

首先通过Kubernets架构图来认识Kubernets各个功能组件之间是怎么相互关联配合工作的。 一、Kubernets架构图&#xff1a; 通过上图来介绍集群功能组件通信详细过程&#xff1a; kubernetes api server 作为集群的核心&#xff0c;负责集群各功能模块之间的通信。集群内的各个功…...

【数据库初阶】MySQL数据类型

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 MySQL…...

(九千七-星河襟)椭圆曲线加密(ECC, Elliptic Curve Cryptography)及其例题

椭圆曲线加密&#xff08;ECC&#xff09;是一种基于椭圆曲线数学的公钥加密技术。它提供了一种高效的加密方法&#xff0c;能够在较小的密钥长度下实现与传统加密算法&#xff08;如RSA&#xff09;相同的安全级别。以下是ECC的主要特点和工作原理的总结&#xff1a; 1. 基本…...

LookingGlass使用

背景 Looking Glass 是一款开源应用程序&#xff0c;可以直接使用显卡直通的windows虚拟机。 常见环境是Linux hostwindows guest&#xff0c;基本部署结构图&#xff1a; 编译 git clone --recursive https://github.com/gnif/LookingGlass.git编译client mkdir client/b…...

ArcGIS Server 10.2授权文件过期处理

新的一年&#xff0c;arcgis server授权过期了&#xff0c;服务发不不了。查看ecp授权文件&#xff0c;原来的授权日期就到2024.12.31日。好吧&#xff0c;这里直接给出处理方法。 ArcGIS 10.2安装时&#xff0c;有的破解文件中会有含一个这样的注册程序&#xff0c;没有的话&…...

js es6 reduce函数, 通过规格生成sku

const specs [{ name: 颜色, values: [红色, 蓝色, 绿色] },{ name: 尺寸, values: [S, M, L] } ];function generateSKUs(specs) {return specs.reduce((acc, spec) > {const newAcc [];for (const combination of acc) {for (const value of spec.values) {newAcc.push(…...

Spring 事务底层原理

61 张图&#xff0c;剖析 Spring 事务&#xff0c;就是要钻到底&#xff01; 拜托&#xff01;面试请不要再问我 Transactional my&#xff1a; AOP Transactional PlatformTransactionManager&#xff1a;数据源隔离 TransactionInterceptor&#xff1a;拦截添加了注解的…...

ruoyi 分页 查询超出后还有数据; Mybatis-Plus 分页 超出后还有数据

修改&#xff1a;MybatisPlusConfig 类中 分页合理化修改为&#xff1a;paginationInnerInterceptor.setOverflow(false);...

基于Java的超级玛丽游戏的设计与实现【源码+文档+部署讲解】

目 录 1、绪论 1.1背景以及现状 1.2 Java语言的特点 1.3 系统运行环境及开发软件&#xff1a; 1.4 可行性的分析 1.4.1 技术可行性 1.4.2 经济可行性 1.4.3 操作可行性 2、 需求分析 2.1 用户需求分析 2.2功能需求分析 2.3界面设计需求分析…...

智慧工地信息管理与智能预警平台

建设背景与政策导向 智慧工地信息管理与智能预警平台的出现&#xff0c;源于工地管理面临的诸多挑战&#xff0c;如施工地点分散、危险区域多、监控手段落后等。随着政府对建筑产业现代化的积极推动&#xff0c;各地纷纷出台政策支持智慧工地的发展&#xff0c;旨在通过信息技…...

使用Apache Mahout制作 推荐引擎

目录 创建工程 基本概念 关键概念 基于用户与基于项目的分析 计算相似度的方法 协同过滤 基于内容的过滤 混合方法 创建一个推荐引擎 图书评分数据集 加载数据 从文件加载数据 从数据库加载数据 内存数据库 协同过滤 基于用户的过滤 基于项目的过滤 添加自定…...

记录:导出功能:接收文件流数据进行导出(vue3)

请求接口&#xff1a;一定要加responseType: blob 后端返回数据&#xff1a; api.js export function export() {return request({url: dev/api/export,method: get,responseType: blob,//一定要加}) } vue&#xff1a; import {export} from /api// 导出 const exportTab…...

GraphRAG vs 传统 RAG:如何通过知识图谱提升 AI 检索能力

相比传统 RAG 仅能独立检索文本片段的局限性&#xff0c;GraphRAG通过构建实体关系图谱实现了信息间的连接&#xff0c;让 AI 能更完整地理解和检索复杂的关联信息&#xff0c;从而生成更准确和连贯的回答 问题背景: 想象有一本详细记录某人(X)成就的传记,每个章节都描述了他的…...

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言&#xff1a;关于「 num_classes 1 」引发的探究。 2024年尾声&#xff0c;学弟问到一个问题&#xff1a;在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中&#xff0c;变量 num_classes 的值为1&…...

组网实训实现

小型单元网络实现 IP划分&#xff1a; 外网:172.1.1.0/24 172.1.2.0/24 内网&#xff1a;基于192.168.3.0/24的子网划分 综合办公楼&#xff1a;192.168.3.00 000000 /26&#xff08;192.168.3.0-192.168.3.63&#xff09; 综合一楼&#xff1a;192.168.3.0000 0000 /28&…...

【DevOps】Jenkins部署

Jenkins部署 文章目录 Jenkins部署资源列表基础环境一、部署Gilab1.1、安装Gitlab1.2、修改配置文件1.3、加载配置文件1.4、访问Gitlab1.5、修改root登录密码1.6、创建demo测试项目1.7、上传代码1.8、验证上传的代码 二、部署Jenkins所需软件2.1、部署JDK2.2、部署Tomcat2.3、部…...

HTML——38.Span标签和字符实体

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>span标签和字符实体</title><style type"text/css">h1{text-align: center;}p{text-indent: 2em;}span{color: red;}</style></head><…...

doris:基于 Arrow Flight SQL 的高速数据传输链路

Doris 基于 Arrow Flight SQL 协议实现了高速数据链路&#xff0c;支持多种语言使用 SQL 从 Doris 高速读取大批量数据。 用途​ 从 Doris 加载大批量数据到其他组件&#xff0c;如 Python/Java/Spark/Flink&#xff0c;可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去…...

文献阅读 | B. S. Carmo 2010

目录 一、文献名称二、原文地址三、ABSTRACT主要发现详细观察分岔分析雷诺数依赖性比较见解意义结论 四、IINTRODUCTION历史研究回顾计算研究近期研究进展研究空白与目的论文结构 一、文献名称 二、原文地址 研究目的&#xff1a;研究串列排列双圆柱体周围流场中的次级不稳定性…...

GRAPE——RLAIF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)

前言 24年具身前沿模型大汇总 过去的这两年&#xff0c;工作之余&#xff0c;我狂写大模型与具身的文章&#xff0c;加之具身大火&#xff0c;每周都有各种朋友通过CSDN私我及我司「七月在线」寻求帮助/指导(当然&#xff0c;也欢迎各大开发团队与我司合作共同交付&#xff09…...

超越YOLO11!DEIM:先进的实时DETR目标检测

DEIM: DETR with Improved Matching for Fast Convergence arXiv: https://arxiv.org/abs/2412.04234 Project webpage&#xff1a;https://www.shihuahuang.cn/DEIM/ GitHub&#xff1a;https://github.com/ShihuaHuang95/DEIM 1 背景&#xff1a;DETR目标检测框架 目标检…...

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构&#xff1a; npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…...

用户注册模块(芒果头条项目进度4)

1 创建⽤户模块⼦应⽤ 1.1 在项⽬包⽬录下 创建apps的python包。 1.2 在apps包下 创建应⽤userapp $ cd 项⽬包⽬录/apps $ python ../../manage.py startapp userapp 1.3 配置导包路径 默认情况下导包路径指向项⽬根⽬录 # 通过下⾯语句可以打印当前导包路径 print(sys.pa…...

Java Map集合、集合的嵌套

一. 概述 1. Map集合称为双列集合&#xff0c;格式&#xff1a;{key1value1, key2value2,.....},一次需要存一对数据作为一个元素。 2. Map集合的每个元素"keyvalue"称为一个键值对/键值对对象/一个Entry对象&#xff0c;Map集合也被称为"键值对集合"。 3.…...

C#中使用系统默认应用程序打开文件

有时您可能希望程序使用默认应用程序打开文件。 例如&#xff0c;您可能希望显示 PDF 文件、网页或互联网上的 URL。 System.Diagnostics.Process类的Start方法启动系统与文件关联的应用程序。 例如&#xff0c;如果文件扩展名为.txt&#xff0c;则系统会在 NotePad、WordPa…...

论文泛读《LPFHE: Low-Complexity Polynomial CNNs for Secure Inference over FHE》

文章目录 1、摘要2、介绍3、文章结构4、总结 1、摘要 Machine learning as a service (MLaaS) 在客户中越来越受欢迎。为了解决 MLaaS 中的隐私问题&#xff0c;引入了 FHE 来保护客户端的数据。  然而&#xff0c;FHE 不能直接评估 卷积神经网络 (CNNs) 中的非算数激活函数。…...

基于Spring Boot的IT技术交流和分享平台的设计与实现源码

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的IT技术交流和分享平台的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于S…...

力扣hot100——二分查找

35. 搜索插入位置 class Solution { public:int searchInsert(vector<int>& a, int x) {if (a[0] > x) return 0;int l 0, r a.size() - 1;while (l < r) {int mid (l r 1) / 2;if (a[mid] < x) l mid;else r mid - 1;}if (a[l] x) return l;else …...

1月第一讲:WxPython跨平台开发框架之前后端结合实现附件信息的上传及管理

1、功能描述和界面 前端&#xff08;wxPython GUI&#xff09;&#xff1a; 提供文件选择、显示文件列表的界面。支持上传、删除和下载附件。展示上传状态和附件信息&#xff08;如文件名、大小、上传时间&#xff09;。后端&#xff08;REST API 服务&#xff09;&#xff1a…...

uniapp:跳转第三方地图

1.跳转第三方高德地图 //跳转地图 toMap(item){uni.navigateTo({url: (window.location.href https://uri.amap.com/navigation?to${item.lng},${item.lat},${item.shopName}&modecar&policy1&srchttps://gawl.gazhcs.com/wap/index.html&callnative0)}) },…...

源码理解 UE4中的 FCookStatsManager::FAutoRegisterCallback RegisterCookStats

官方文档&#xff1a;https://dev.epicgames.com/documentation/zh-cn/unreal-engine/API/Runtime/Core/ProfilingDebugging/FCookStatsManager文档中的注释&#xff1a; When a cook a complete that is configured to use stats (ENABLE_COOK_STATS), it will broadcast this…...

QML Text详解

1. 概述 Text 是 QML 中用来显示文本的基本组件。它可以用于创建静态的标签、标题、说明文字等&#xff0c;支持多种文本格式、样式、颜色、对齐方式等配置。Text 组件也支持动态文本内容的显示&#xff0c;可以通过绑定数据源来实时更新文本内容。 Text 组件非常灵活&#x…...