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

【C语言】指针详解(接)

前言:
文接上章,在上章节讲解了部分指针知识点,在本章节为大家继续提供。

六·指针与字符串:C 语言字符串的本质

在 C 语言中,字符串实际上是一个以\0结尾的字符数组。字符串常量本质上是指向字符数组首元素的指针:

char *str = "Hello, World!"; // 字符串常量存储在只读内存区
printf("%s\n", str);         // 输出Hello, World!
printf("首字符:%c\n", *str); // 输出H
printf("第3个字符:%c\n", *(str + 2)); // 输出l

动态分配字符串: 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() 
{char *str = (char *)malloc(20 * sizeof(char)); // 动态分配20字节内存if (str == NULL) 
{printf("内存分配失败\n");return 1;}strcpy(str, "Dynamic String"); // 复制字符串到分配的内存printf("%s\n", str); // 输出Dynamic Stringfree(str); // 释放内存,防止内存泄漏return 0;
}

malloc函数在内存函数中讲解过,想要详细了解的可以点开主页,看一下文章。 

七·多级指针:指针的指针

指针变量本身也有自己的内存地址,因此可以定义指向指针的指针(多级指针):

int num = 10;
int *p = &num;     // 一级指针,指向int
int **pp = &p;     // 二级指针,指向int*
int ***ppp = &pp;  // 三级指针,指向int**printf("num的值:%d\n", ***ppp); // 解引用三次,输出10

多级指针常用于需要修改一级指针本身的场景,比如动态分配二维数组:

int **matrix;
int rows = 3, cols = 4;// 分配行指针数组
matrix = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) 
{// 为每一行分配列元素matrix[i] = (int *)malloc(cols * sizeof(int));
}// 使用二维数组
matrix[0][0] = 100;// 释放内存
for (int i = 0; i < rows; i++) 
{free(matrix[i]);
}
free(matrix);

八·常见指针错误

野指针:未初始化的指针

int *p;
*p = 10; // 错误!p指向随机地址

空指针解引用

int *p = NULL;
*p = 10; // 错误!解引用空指针

内存泄漏:动态分配的内存未释放

int *p = (int *)malloc(sizeof(int));
// 使用p
// 忘记free(p)

 九·总结

 

  1. 指针变量存储的是内存地址
  2. 通过解引用操作符*可以访问和修改内存中的数据
  3. 指针算术允许在内存中移动
  4. 指针是实现数组、字符串、动态内存分配和复杂数据结构的基础
  5. 使用指针时必须特别注意内存管理和避免常见错误

 

 

 

相关文章:

【C语言】指针详解(接)

前言&#xff1a; 文接上章&#xff0c;在上章节讲解了部分指针知识点&#xff0c;在本章节为大家继续提供。 六指针与字符串&#xff1a;C 语言字符串的本质 在 C 语言中&#xff0c;字符串实际上是一个以\0结尾的字符数组。字符串常量本质上是指向字符数组首元素的指针&…...

【C】箭头运算符

在C语言中&#xff0c;p_tone->power_off 是一种通过指针访问结构体成员的方法&#xff0c;称为箭头运算符&#xff08;->&#xff09;。它主要用于以下场景&#xff1a; 1. 语法解释 p_tone&#xff1a;是一个指向结构体&#xff08;或联合体&#xff09;的指针。powe…...

HTTP Accept简介

一、HTTP Accept是什么 HTTP协议是一个客户端和服务器之间进行通信的标准协议&#xff0c;它定义了发送请求和响应的格式。而HTTP Accept是HTTP协议中的一个HTTP头部&#xff0c;用于告诉服务器请求方所期望的响应格式。这些格式可以是媒体类型、字符集、语言等信息。 HTTP A…...

什么是单片机?

众所周知&#xff0c;人类行为受大脑调控&#xff0c;正如视觉、听觉、味觉、嗅觉、触觉及运动功能等感官与肢体活动均受其指挥&#xff1b;换言之&#xff0c;大脑作为人体的中枢神经系统&#xff0c;负责管理所有可控制的生理功能。 在电子设备领域&#xff0c;单片机…...

联通专线加持!亿林网络 24 核 32G 裸金属服务器,千兆共享带宽适配中小型企业 IT 架构

在当今数字化时代&#xff0c;企业的业务运营越来越依赖高效、稳定的 IT 架构。对于中小型企业而言&#xff0c;如何在有限的预算内构建强大且可靠的 IT 基础设施&#xff0c;是一项关键挑战。亿林网络推出的 24 核 32G 裸金属服务器&#xff0c;搭配联通专线和千兆共享带宽&am…...

Ubuntu的shell脚本

关于shell脚本 • shell脚本是文本的一种。 • shell脚本是可以运行的文本。 • shell脚本的内容是由说辑和数据组成。 • shell 脚本是解释型语言。 shell脚本存在的意义 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具 Linux/UNIX系统…...

微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理

实现效果&#xff1a;微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理 首先在web-view里是不可实现的&#xff08;据我了解下来&#xff09; 参考小程序文档&#xff1a;page-container 大致逻辑&#xff1a; 1、page-container可实现页面离开前拦截 2、由于web-vie…...

从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE

租房公寓电费管理系统是集智能计量、自动化计费、线上缴费、数据管理于一体的综合性解决方案&#xff0c;旨在解决传统电费管理中人工抄表误差大、收费效率低、纠纷频发等痛点。系统通过部署智能电表实时采集用电数据&#xff0c;结合云计算与大数据分析技术&#xff0c;实现电…...

Rust 学习笔记:关于闭包的练习题

Rust 学习笔记&#xff1a;关于闭包的练习题 Rust 学习笔记&#xff1a;关于闭包的练习题问题 1问题 2以下程序能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;以下程序能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;考虑该 API&#xff0c;空白处填…...

记一次前端逻辑绕过登录到内网挖掘

前言 在测试一个学校网站的时候&#xff0c;发现一个未授权访问内网系统&#xff0c;但是这个未授权并不是接口啥的&#xff0c;而是对前端 js 的审计和调试发现的漏洞&#xff0c;这里给大家分享一下这次的漏洞的过程。 进入内网的过程 可以看到是一个图书馆的网站&#xff…...

有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景

有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景 在 IE11 环境下操作 Excel 且需要支持单元格合并、边框、背景等格式时&#xff0c;需考虑兼容性较强的库。以下是符合需求的工具及对比分析&#xff1a; 1. SheetJS&#xff08;js-xlsx&am…...

x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力

一、引言 汇编语言是硬件与软件的桥梁&#xff0c;x86 和 ARM 作为两大主流架构&#xff0c;其汇编语言在设计理念、指令集、编程风格上差异显著。本文以 x86 汇编为核心&#xff0c;结合与 ARM 的对比&#xff0c;解析 x86 汇编的技术细节与应用场景&#xff0c;助力开发者深…...

Springboot 整合 WebSocket 实现聊天室功能

目录 前言一、WebSocket原理二、Spring Boot集成WebSocket2.1. 引入依赖2.2 配置类WebSocketConfig2.3 WebSocketServer 类2.4 前端代码 index.html2.5 Controller访问首页 前言 WebSocket概述&#xff1a; 在日常的web应用开发中&#xff0c;常见的是前端向后端发起请求&…...

用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容

很多程序员都有这样的经历&#xff1a;刷掘金、看文章、找灵感、追热点。但你有没有想过&#xff0c;有一天让“爬虫”代替你去浏览这些内容&#xff1f;自动提取标题、作者、点赞数、评论数&#xff0c;一键生成你的专属“技术热点日报”。 今天我们就用 Trae IDE PyQt5 来完…...

python和风api获取天气(JSON Web Token)

下载安装openssl 默认安装目录&#xff0c;添加C:\Program Files\OpenSSL-Win64\bin到用户Path环境变量 打开cmd&#xff0c;执行命令&#xff0c;会生成两个文件ed25519-private.pem&#xff0c;ed25519-public.pem openssl genpkey -algorithm ED25519 -out ed25519-privat…...

模板应用更新同步到所有开发中的应用

需求是为多个 Vue 3 应用方便地同步模板更新&#xff0c;并且模板自身也可能演进&#xff0c;采用 Git 上游仓库 (Upstream) 策略。这种方法在操作上相对直观&#xff0c;更贴近常规的 Git 工作流&#xff0c;并且能较好地处理模板更新中可能涉及到的配置文件、依赖项以及 Vue …...

git和gitee的常用语句命令

Git 和 Gitee 常用命令及语法规则 一、Git 基础配置与初始化 在使用 Git 进行版本控制之前&#xff0c;需要进行用户签名的配置。此操作只需执行一次即可生效。 git config --global user.name "用户名" # 设置用户名 git config --global user.email "邮箱…...

52、C# 泛型 (Generics)

泛型是 C# 2.0 引入的一项强大功能&#xff0c;它允许你编写可以处理多种数据类型的代码&#xff0c;而无需为每种类型重复编写相同的逻辑。泛型提高了代码的重用性、类型安全性和性能。 基本概念 泛型类 public class GenericClass<T> {private T _value;public Gene…...

理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后

在Vue2中,响应式系统是一切魔法的源头,无论是模板中的数据绑定,还是computed,watch的精准监听,都离不开Vue背后的响应式机制,本文将从源码角度出发,结合实例,深入剖析vue2是如何通过数据劫持(Object.defineProperty)和依赖收集实现响应式的 一.Vue2响应式系统基本原理 vue2中…...

深入理解 Pinia:Vue 状态管理的革新与实践

深入理解 Pinia&#xff1a;Vue 状态管理的革新与实践 一、引言 在 Vue.js 应用开发中&#xff0c;状态管理是构建复杂应用的关键环节。Pinia 作为新一代 Vue 状态管理库&#xff0c;凭借其简洁的 API 设计、强大的开发体验和良好的性能表现&#xff0c;逐渐成为 Vue 开发者的…...

Dubbo高频面试题

引言 作为分布式服务框架的标杆&#xff0c;Dubbo凭借其高性能RPC通信、灵活的服务治理能力和丰富的容错机制&#xff0c;成为Java技术栈中微服务领域的核心考点。本文系统梳理Dubbo高频面试核心知识点&#xff0c;涵盖容错策略、负载均衡、注册中心原理、服务上下线感知等关键…...

Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果

背景介绍&#xff1a;在PCB设计过程中&#xff0c;布线初期印制板上的飞线错综复杂&#xff0c;信号线和电源线混合交错&#xff0c;但是实际上对于多层板来说&#xff0c;电源的网络一般是通过电源层铺铜连接的&#xff0c;很少需要走线&#xff0c;这样混乱的情况会严重影响设…...

一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例

目录 一、ESP-01S无线模块: &#xff08;1&#xff09;特点&#xff1a; &#xff08;2&#xff09;管脚定义&#xff1a; &#xff08;3&#xff09;启动模式&#xff1a; 二、ESP-01S出厂固件烧录&#xff1a; &#xff08;1&#xff09;引脚接线&#xff1a; &#xff0…...

算法-基础算法

一、枚举算法 也称为穷举算法&#xff0c;指的是按照问题本身的性质&#xff0c;一一列举出该问题所有可能的解&#xff0c;并在逐一列举的过程中&#xff0c;将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中&#xff0c;既不能遗漏也不能重复 1. 问题 …...

特种设备作业人员-G3锅炉水处理如何备考学习?

备考特种设备作业人员 - G3 锅炉水处理可以从了解考试信息、掌握基础知识、选择学习资料、制定学习计划等多个方面入手&#xff0c;以下是具体的建议&#xff1a; ​ ​1.了解考试信息 *明确考试大纲&#xff1a;详细了解 G3 锅炉水处理考试大纲的要求&#xff0c;明确考试的…...

Reactor模式详解:高并发场景下的事件驱动架构

文章目录 前言一、Reactor模式核心思想二、工作流程详解2.1 服务初始化阶段2.2 主事件循环2.3 子Reactor注册流程2.4 IO事件处理时序2.5 关键设计要点 三、关键实现技术四、实际应用案例总结 前言 在现代高性能服务器开发中&#xff0c;如何高效处理成千上万的并发连接是一个关…...

UniApp 生产批次管理模块技术文档

UniApp 生产批次管理模块技术文档 1. 运行卡入站页面 (RunCardIn) 1.1 页面结构 <template><!-- 页面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 页头组件 --><pageHeader :title"$t(MENU:…...

项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【Qt音乐播放器】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 代码仓库&#xff1a;MusicPlayer v1.0版视频展示&#xff1a;Qt -音乐播放器(仿网易云)V1.0 前言 本文的目标&#xff1a; 一是设置任务栏的图标&#xff0c; 二…...

国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路

万翼斗拱在国产BIM领域迈出重要一步&#xff0c;凭借二三维一体化、参数化建模及AI辅助设计等功能形成差异化竞争力&#xff0c;在住宅设计场景中展现效率优势&#xff0c;但与国际主流软件相比&#xff0c;在功能完整性、性能稳定性和生态成熟度上仍有显著差距&#xff0c;需通…...

记录算法笔记(2025.5.29)最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…...