关于C语言的杂记5
文章目录
- 引入
- 正文
- 内部函数与外部函数
- 相关数组的知识点
- 数组的初始化
- 测试一维数组在内存中存储的地址:
- 遍历二维数组的值
- 测试二维数组的地址(观察内存情况)
- 数组下标为0开始的由来
- 两个数交换位置的三种方法
引入
写在前面:关于C语言这部分内容,有人说过,对自己的定位准确非常重要,我是小白。我正处于C语言知识积累阶段,并写不出成系统的知识供大家观看,而各个知识点内容都载自或者加工于网络上面优秀的博主,如果你觉好看,那一定这些博主的功劳,而我仅仅是根据自己的知识结构进行记录、和按照突然想到方式进行测试,然后把涉及不会的知识查找着补充进来,以便后面复习,其中不免有很多错误之处,如果你能指出了那最好不过,如果观看请一定带着批判角度去看。
正文
内部函数与外部函数
总结:
内部函数:被static修饰的是内部函数,内部函数只能被本文件中其他函数调用,不能被其他文本的函数调用。
外部函数:被extern修饰的是外部函数,外部函数范围大,不仅可以被本文的其他函数调用,还可以被其他文本的函数调用;
C语言中规定,extren可以省略,但是在调用此函数的其他文件中,需要对此函数进行声明。
点击跳转原文优秀博主bleauchat链接
相关数组的知识点
数组的初始化
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};//完全初始化
char arr4[] = {'a',98,'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
数组在创建得时候如果想不指定数组得确定的大小就得初始化。数组得元素个数根据初始化得内容来确定。但是对于下面得代码要区分,内存中如何分配?
#include <stdio.h>
#include <string.h>int main(int argc, char **argv) {char arr1[] = "abc"; // 定义一个字符型数组,自动分配3个空间并赋值为"abc"char arr2[3] = {'a','b','c'}; // 定义一个字符型数组,手动分配3个空间并赋值为'a'、'b'、'c'printf("%d\n", sizeof(arr1)); // 输出arr1数组的大小,为4(包括末尾的'\0')printf("%d\n", sizeof(arr2)); // 输出arr2数组的大小,为3printf("%d\n", strlen(arr1)); // 输出arr1字符串的长度,为3(不包括末尾的'\0')printf("%d\n", strlen(arr2)); // 输出arr2字符串的长度,长度不定(因为不一定有'\0')
}
对于printf(“%d\n”, strlen(arr2));也就是13行代码,两个编译器都有不同的值。
dev C++5.6.3

C(lang)在线工具点击蓝色跳转C(lang)在线工具

解释如下:
arr1 ----> a b c \0 ----> 占4个字节(sizeof)
arr2 ----> a b c ----> 占3个字节(sizeof)
arr1 ----> a b c \0 ----> 占3个字节(strlen)
arr2 ----> a b c ----> 随机值(strlen)因为后面遇到\0是随机的,不确定的
1、strlen 和 sizeof 没有什么关联
2、strlen 是求字符串长度的 - 只能针对字符串求长度 - 库函数 - 使用得引用头文件
3、sizeof 计算变量、数组、类型得大小 - 单位是字节 -操作符
//注解:在没有引用头文件" #include <string.h> "双引号内的代码时,strlen会报错,而sizeof无需依赖其他头文件,只要有输入输出函数" #include <stdio.h> "就可以输出。


测试一维数组在内存中存储的地址:
#include <stdio.h>
int main() {int arr[10] = { 0 };int i = 0;for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}
注意:%p表示用户希望计算机显示的值是以数组的地址的方式输出的。
测试结果

测试结论:数组在内存中是连续存放的

遍历二维数组的值
#include <stdio.h>
int main(){//定义一个3行4列的二维数组,并初始化前两行int arr[3][4] = {{1,2},{4,5}};int i = 0;//循环3次,遍历每一行for(i=0; i<3; i++){int j = 0;//循环4次,遍历该行的每一个元素,并打印出该元素的值for(j=0; j<4; j++){printf("%d ", arr[i][j]);}}return 0;
}

测试二维数组的地址(观察内存情况)
#include <stdio.h>
int main(){ int arr[3][4]; // 定义一个3行4列的整型数组int i = 0; for(i=0; i<3; i++) // 遍历每一行{int j = 0; for (j = 0; j < 4; j++) // 遍历每一列{ printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]); // 输出当前元素的地址}} return 0;
}

结论:二维数组也在内存中的存储情况是连续的。
数组下标为0开始的由来

两个数交换位置的三种方法
//1temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;//2arr[j] = arr[j] * arr[j + 1];arr[j + 1] = arr[j] / arr[j + 1];arr[j] = arr[j] / arr[j + 1];//3arr[j] = arr[j] + arr[j + 1];arr[j + 1] = arr[j] - arr[j + 1];arr[j] = arr[j] - arr[j + 1];相关文章:
关于C语言的杂记5
文章目录 引入正文内部函数与外部函数相关数组的知识点数组的初始化测试一维数组在内存中存储的地址:遍历二维数组的值测试二维数组的地址(观察内存情况)数组下标为0开始的由来 两个数交换位置的三种方法 引入 写在前面:关于C语言这部分内容,…...
YOLOv5 vs YOLOv6 vs YOLOv7目标检测模型速度和准确度的性能比较——深入研究
如果您正在进行目标检测项目,您很可能会选择众多 YOLO 模型中的一种。从现有的 YOLO 对象检测模型的数量来看,如何选择最佳模型是一个艰难的选择。 您可能会发现自己正在考虑: 选择哪种 YOLO 模型以获得最佳 FPS? CPU 与 GPU 的推理速度如何?选择哪种 GPU?微型、小型、…...
如何增加网站权重?有效提高网站权重的技巧方法
权重对于网站优化来说非常的重要,那什么是网站权重呢?网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一个网站权重越高,在搜索引擎所占的份…...
路径规划 | 图解快速随机扩展树RRT算法(附ROS C++/Python/Matlab仿真)
目录 0 专栏介绍1 什么是RRT算法?2 图解RRT算法原理3 算法仿真与实现3.1 ROS C++实现3.2 Python实现3.3 Matlab实现0 专栏介绍 🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);…...
【Stable Diffusion WebUI】一篇文章教你如何安装和使用Stable Diffusion WebUI
文章目录 Stable Diffusion WebUI1. 安装1.1 下载 stable-diffusion-webui1.2 运行 webui.sh 2. 安装插件2.1 命令行安装2.2 extensions 安装2.3 常用插件 3. 使用教程3.1 页面布局3.3 快捷栏设置3.3.1 PNG Info3.3.2 Tagger Stable Diffusion WebUI 1. 安装 1.1 下载 stable…...
Python篇——数据结构与算法(第二部分)
目录 二、排序算法(承接第一部分) 1、堆排序算法——树的基础知识补充 2、树的基本概念 3、二叉树基础知识 (1)满二叉树 (2)完全二叉树 (3)二叉树的存储方式(表示方式…...
人工智能之读懂CNN卷积神经网络
通过往期文章的分享,我们了解了神经网络的结构,一般分为输入层,隐藏层,输出层 TensorFlow神经网络 那什么是卷积神经网络那,这就要我们追溯一下人类识别图像的原理 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现…...
go手写Redis(1)之协议说明
手写Redis 参考大佬的go实现redis,自己实现一个简单版本的用于学习go以及网络编程相关 https://github.com/HDT3213/godis https://coding.imooc.com/class/576.html #慕课网课程 源码地址: https://gitee.com/haijun1998/go_redis RESP协议 Redis Ser…...
Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?
目录 一图胜万言!! 解释说明 1. hadoop 2. hive 3. hbase 总结 一图胜万言!! 解释说明 1. hadoop 它是一个分布式计算分布式文件系统,前者其实就是 MapReduce,后者是 HDFS 。后者可以独立运行&…...
羽毛球中级提高班课后总结
2023.3.28第一课 🏸️四点对角线步伐练习🏸️ 1️⃣每一次接球一定要有启动步,脚跟离地; 2️⃣两边上网都是先迈右腿,加一个并步,最后一步大迈步,脚跟先落地; 3️⃣右边上网脚尖朝…...
多维时序预测 | Matlab基于最小二乘支持向量机LSSVM多维时间序列预测,LSSVM多变量时间序列预测
文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,...
KDZK-F水轮发电机转子测试仪
一、产品概述 KDZK-F水轮发电机转子测试仪是判断发电机转子绕组有无匝间短路的专用仪器,可以自动、手动(单向或双向)测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标,操作更方便。 可选择快速的…...
I2C通信协议原理和MPU6050
一、串口通讯 只能在两个设备之间进行 若要三台设备两两通信,则每个设备得需要两组窗口,为3组相互独立的窗口通讯 为解决这个问题:设计了总线通讯,有多种,I2C为其中一种 二、I2C通信 (1&#…...
3.5 RDD持久化机制
一、RDD持久化 1、不采用持久化操作 查看要操作的HDFS文件 以集群模式启动Spark Shell 按照图示进行操作,得RDD4和RDD5 查看RDD4内容,会从RDD1到RDD2到RDD3到RDD4跑一趟 显示RDD5内容,也会从RDD1到RDD2到RDD3到RDD5跑一趟 2、采用持久化…...
Nginx(四)
部署LNMP架构动态网站WordPress LNMPLinuxNginxMySQLPhp 环境 192.168.29.141centos8Nginx1.24.0192.168.29.142centos8MySQL8.0.33192.168.29.143centos8Php7.2.24 关闭firewalld systemctl stop firewalld systemctl disable firewalld 关闭selinux setenforce 0 sed -ir…...
【fps系统重构】-观察cpu、memroy、io -iostat
当您使用iostat命令监控磁盘I/O情况时,可以查看以下指标: rrqm/s:每秒发生的读请求被合并的次数。如果该指标很低,说明读请求较少或未被合并,可能会导致磁盘I/O负载过重。wrqm/s:每秒发生的写请求被合并的…...
iptables 添加,删除,查看,修改,及docker运行时修改端口
一,安装并启动防火墙 [rootlinux ~]# /etc/init.d/iptables start 当我们用iptables添加规则,保存后,这些规则以文件的形势存在磁盘上的,以centos为例,文件地址是/etc/sysconfig/iptables,我们可以通过命令的方式去…...
Liunx安装Android Studio
Liunx安装Android Studio 可参考官方文档: 安装 Android Studio 如需在 Linux 上安装 Android Studio,请按以下步骤操作: 1.将您下载的 .zip 文件解压缩到您应用的相应位置,例如 /usr/local/ 中(用于用户个人资料&am…...
8、Linux C/C++ 实现MySQL的图片插入以及图片的读取
本文结合了Linux C/C 实现MySQL的图片插入以及图片的读取,特别是数据库读写的具体流程 一、文件读取相关函数 fseek() 可以将文件指针移动到文件中的任意位置。其基本形式如下: int fseek(FILE *stream, long offset, int whence);其中,str…...
【搭建轻量级图床】本地搭建LightPicture开源图床管理系统 - 异地远程访问
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
