关于C语言的杂记5

news2024/10/6 8:29:13

文章目录

  • 引入
  • 正文
    • 内部函数与外部函数
    • 相关数组的知识点
      • 数组的初始化
      • 测试一维数组在内存中存储的地址:
      • 遍历二维数组的值
      • 测试二维数组的地址(观察内存情况)
      • 数组下标为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数组的大小,为3
	
	printf("%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 是求字符串长度的 - 只能针对字符串求长度 - 库函数 - 使用得引用头文件
3sizeof 计算变量、数组、类型得大小 - 单位是字节 -操作符
//注解:在没有引用头文件"   #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表示用户希望计算机显示的值是以数组的地址的方式输出的。
测试结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/e2762ad5183b4510b9e686c3b3b80aeb.png

测试结论:数组在内存中是连续存放的
在这里插入图片描述

遍历二维数组的值

#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开始的由来

在这里插入图片描述

两个数交换位置的三种方法

//1
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;

//2
                arr[j] = arr[j] * arr[j + 1];
                arr[j + 1] = arr[j] / arr[j + 1];
                arr[j] = arr[j] / arr[j + 1];

//3
                arr[j] = arr[j] + arr[j + 1];
                arr[j + 1] = arr[j] - arr[j + 1];
                arr[j] = arr[j] - arr[j + 1];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

msys2 pacman 安装 ncurses-devel 解决 make menuconfig 问题

问题描述 windows 下使用 msys2 环境&#xff0c;可以开发编译一些 Linux 下的软件包&#xff0c;一般Linux 下的软件包&#xff0c;需要安装 PC 平台的gcc、gcc交叉编译工具链&#xff0c;如 arm的&#xff0c;以及一些常用的 软件包&#xff0c;如 python 等 有一个软件包&a…

【工具】Ubuntu 非root用户 安装openssl

文章目录 openssl 下载 & 解压指定安装路径编译安装配置环境变量验证是否安装成功 openssl 下载 & 解压 openssl 下载地址 或者 https://www.openssl.org/source/openssl-1.1.1l.tar.gz 上传到服务器 解压 tar -zxvf openssl-1.1.1l.tar.gz切换到openssl-1.1.1l目…

maven-resources-plugin详解

目录 一、什么场景会用到&#xff1f;二、他有什么作用&#xff1f;三、插件常用配置1、字符集编码2、resources相关的配置2.1、resources配置结构2.2、resources默认配置2.2.1、maven超级pom默认配置2.2.2、spring-boot对resources插件的默认配置2.2.3、resources最终生效的配…

2023年最新VMware 17+虚拟机详细配置安装【程序员使用指南】!!

文章目录 Vmware版本选择17Pro安装自定义安装填写对应的许可证正式安装虚拟机进行对应的配置配置镜像文件选择对应的语言&#xff1a;到这个界面&#xff0c;选择中文 安装结束连接对应的xshell Vmware版本选择17Pro安装 ● 最开始从这里出发 自定义安装 ● 记得自定义在自…

TikTok选品,什么产品在TikTok最受欢迎?

TikTok是当下的海外社交媒体推广新风口已经有目共睹&#xff0c;与此同时跨境商家们或许都面临着同样的问题&#xff0c;就是TikTok要怎么选品&#xff0c;什么产品才会比较受欢迎。俗话说&#xff1a;七分靠选品&#xff0c;三分靠运营。选品选对了&#xff0c;运营也就事半功…

chatgpt赋能Python-python3_decode函数

Python3 decode函数 - 解码你的数据 编程领域中&#xff0c;字符串是一个不可避免的概念&#xff0c;他们构成了我们生活中逻辑化和技术实现化的重要组成部分。不仅如此&#xff0c;字符串的加载和使用也对程序的性能产生了重大的影响。在这篇文章中&#xff0c;我们将重点讨论…

现在有什么基于vue3.0的优秀开源项目呢?

前言 以下是一些github上一些基于vue3.0的优秀开源项目&#xff0c;可以自己选择一些去练一下手&#xff0c;废话少说&#xff0c;直接进入正题---- 1、 vue-manage-system Star: 16k 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案&#xff0c;它提供了一系列的通…

电脑找不到msvcr110.dll怎么办?电脑msvcr110.dll丢失怎么解决?

在使用某些软件或游戏时&#xff0c;有时会出现找不到msvcr110.dll文件的错误提示&#xff0c;这会导致程序无法正常运行。这个问题通常是由于缺少Visual C msvcr110.dll引起的。下面是解决这个问题的几个方法&#xff1a; msvcr110.dll的解决方法一 直接使用dll修复程序进行修…

videojs扩展方法,自定义功能

8版本不支持extend&#xff0c;8支持es6扩展 videojsextend

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons IEEE TMC&#xff5c;深度学习增强的城市峡谷GPS定位 https://github.com/bducgroup/DeepGPS 文章目录 DeepGPS: Deep Learning Enhanced GPS Positioning in Urban CanyonsAbstract1 INTRODUCTION2 BACKGRO…

【C++】如何克服红黑树的恐惧?看这篇文章足够了

红黑树的实现会比AVL简单-.- 文章目录 判断是否是AVL树一、红黑树二、红黑树的实现总结 判断是否是AVL树 上一篇文章我们详细介绍了AVL树并且实现了AVL树&#xff0c;这篇文章我们将在前言中引入判断是否是AVL树的方法&#xff0c;然后我们就进入红黑树的实现&#xff0c;如果…

从0到1精通性能测试,需求到实战压力测试实例(详情)你要的都有...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试需求分析…

David Silver Lecture 9:Exploration and Exploitation

1 Introduction 1.1 Outline 1.1.1 Exploration vs. Exploitation Dilemma 1.1.2 examples 1.1.3 principles Naive Exploration 在前面的章节主要使用的是naive exploration的方法Optimistic Initialisation 这种方法的思想是&#xff0c;我们对每个动作的奖励给出一个乐观的…

C语言深度解刨(一)——关键字

文章目录 前言关键字定义和声明&#xff0c;你懂了吗&#xff1f;最宽宏大量关键字——auto最快的关键字——register最名不副实的关键字——static修饰变量修饰函数 基本数据类型——short、int、long、char、flaot、double变量命名规则 最冤枉的关键字——sizeof常年被人误认…

Java开发 - 不知道算不算详细的分布式锁详解

前言 今天给大家带来一篇关于分布式锁的好文&#xff0c;关于分布式系统下的内容&#xff0c;博主已经写了好几篇了&#xff0c;也收获了大家的不少好评。分布式系统在目前的开发中所占的比重还是比较大的&#xff0c;如果你还没接触过分布式系统&#xff0c;那么欢迎你去学习…

操作文件 --Java EE

目录 一、文件的概念 二、文件的目录&#xff08;directory&#xff09; 三、文件路径&#xff08;Path&#xff09; 四、文件的分类 五、文件的操作 1.文件系统的操作 1.1创建文件--createNewFile( ) 1.2删除文件--delete( ) 和 deleteOnExit( ) 1.3文件改名--renam…

2023ICPC西安邀请赛

比赛完由于被旅游、赶ddl、上班等等各种事情影响&#xff0c;导致我现在才有时间可以写写小作文&#xff0c;这中间隔得时间有点长了&#xff0c;已经不知道从哪开始说起了&#xff0c;灵感也都流失了… before Friday 比赛前一个周&#xff0c;我的队友djk&#xff0c;也是我…

HNU-计算机系统-Challenge

Challenge 计科210X wolf 202108010XXX 本题是从属于第七次讨论课的个人题,听说做了有加分?我来试试。 下面是相关报告。 题目: C 语言的初学者第一个编写的 C 代码一般是如下所示的“ #include <stdio.h> int main() {printf("Hello, World!");

003 - STM32固件库GPIO(三)位带操作

目前掌握的对GPIO引脚的输入输出操作只能使用BSRRL/H、I/ODR寄存器&#xff0c;记得以前学51的时候&#xff0c;对于引脚的输入输出可以采用关键字sbit实现位定义,例如 sbit LED1 P1^3;在STM32中没有类似于sbit一样的关键字&#xff0c;但是提供了位带操作来实现类似于51的为…

网络协议与攻击模拟-11-DHCP协议原理

DHCP 协议 1、掌握 DHCP 的工作原理 2、会在 Windows server 上去部署 DHCP 服务 3、抓流量 &#xff0e;正常 收到攻击后 一、 DHCP 1、 DHCP 基本概念 dhcp &#xff08;动态主机配置协议&#xff09;&#xff1a;主要就是给客户机提供 TCP / IP 参数&#xff08; IP 地…