关于C语言的杂记4

news2025/1/23 3:25:49

文章目录

  • 数据与程序结构
    • C语言的编程机制
    • #include <>和#include ""的区别
    • 形式参数和实际参数
      • 值传递
      • 地址传递
    • 素数

文章内容摘自或加工于C技能树一些大佬的博文

数据与程序结构

阅读完C的编程机制和函数的声明和定义后的一些启发。——预处理

C语言的编程机制

  • 预处理:#include<stdio.hj>以及宏定义相当于调用函数的声明(个人理解),预处理阶段把源程序(.c)中这些头文件宏定义替换为他们真正指向的函数。
  • 编译:把预处理之后的文件(.i)转换成汇编代码(.s),也就是符号语言
  • 汇编:把汇编代码(.s)转换成机器码(.o),也就是二进制文件
  • 链接:把目标文件(.o)和相关的库文件(.so)链接在一起生成可执行文件(.exe)

#include <>和#include ""的区别

二者的区别在于:当被include的文件路径不是绝对路径的时候,有不同的搜索顺序。

1> 对于使用双引号""来include文件,搜索的时候按以下顺序:

先在这条include指令的父文件所在文件夹内搜索,所谓的父文件,就是这条include指令所在的文件
如果上一步找不到,则在父文件的父文件所在文件夹内搜索;
如果上一步找不到,则在编译器设置的include路径内搜索;
如果上一步找不到,则在系统的INCLUDE环境变量内搜索
2> 对于使用尖括号<>来include文件,搜索的时候按以下顺序:

在编译器设置的include路径内搜索;
如果上一步找不到,则在系统的INCLUDE环境变量内搜索

形式参数和实际参数

形式参数

形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用时有效,调用结束时不能再使用。

实际参数

实参出现在主调函数当中,当函数调用时,主调函数把实参的值传送给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式。

值传递

值传递是形参与实参之间进行的是数据交换,而形参的周期从调用开始生效,到调用完就被释放死掉了,所以形参不具有改变实参的功能。当实参是常量变量数组元素(下标变量)表达式,这种值传递时,形参部分可以定义如下:

//形参实现部分
int swap(int a,int b)
{
   int temp;
   temp = a;
   a = b;
   b = temp;
   return 0;
} 
//形参在主函数中调用部分
swap(int a,int b)

主函树、实参定义部分

//定义实参为常量时,有以下两种方式:
const float PI = 3.14; //用此举例子
#define PI 3.14
//主函数部分
int main(int argc, char **argv){
	//实参为常量,方式二 
	const int A = 3;
	const int B = 4;
    swap(A,B);   
	printf("A = %d,B = %d",A,B);
}

//定义实参为变量时
//主函数部分
int main(int argc, char **argv){
	int a = 1;
	int b = 2;
    swap(a,b);   
}

//定义实参为表达式时
//主函数部分
int main(int argc, char **argv){
	int a,b,c,d,x,y;
	
	a=1;b=2;c=3;d=4;
    x = a+b;
	y = c+d;
	
    swap(x,y);   
}

//定义实参为函数元素时
//主函数部分
int main(int argc, char **argv){
	int a[]={1};
	int b[]={3};
	swap(a[0],b[0]);
}


注意:(数组元素,比如a[0],又称为下标变量,它具有普通变量的一切性质,也归为变量,是值传递)
在这里插入图片描述

地址传递

由于是参数组和形参数组都指向同一段内存单元,故它们操作的是同一批数据,所以形参的改变就是改变了实参中的数据数组名数组指针这种地址传递的方式时,此时形参部分可以定义如下:

//形参实现部分
int swap(int *a,int *b)
{
   int temp;
   temp=*a;
   *a=*b;
   *b=temp;
   return 0;
}
//形参在主函数中调用部分
swap(int a,int b)

主函树、实参定义部分

// 实参为数组指针
//主函数
int main (void){
		int arr[] = {1,2};
		int *a = &arr[0];
	    int *b = &arr[1];
		swap(a,b);
	}

// 实参为数组名
//主函数
int main (void){
		int a[] = {1,2};
		int b[] = {3,4};
		swap(a,b);
	}

注意
(1)数组名是一个地址,是数组的首地址,因此用数组名作为函数的参数进行数据传递时,执行的是地址传递方式。
(2)数组指针,即数组元素的地址。
在这里插入图片描述
在这里插入图片描述

素数

/*
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
*/
// 定义一个判断素数的函数,参数为n
int prime(int n){
    int is_prime = 1, i;

    // 如果n小于0,返回-1,表示不符合条件
    if(n < 0){ return -1; }

    // 循环遍历2到n-1之间的所有数
    for(i=2; i<n; i++){

        // 如果n能被i整除,说明n不是素数,将is_prime置为0,跳出循环
        if(n % i == 0){
            is_prime = 0;
            break;
        }
    }

    // 返回is_prime的值,如果为1表示是素数,为0表示不是素数
    return is_prime;
} 

注意:如果将上面的代码中素数函数改成无返回值的,即 “int prime(int n){}” 修改为 “void prime(int n){} ”,则{}里面出现 “return -1;” 虽然可以运行,但是无意义的,可以修改为“return 1;”或者 “return ;”

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

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

相关文章

dubbo技术

1、Dubbo的前世今生 2011年10月27日&#xff0c;阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo&#xff0c;服务治理和SOA的设计理念开始逐渐在国内软件行业中落地&#xff0c;并被广泛应用。 早期版本的dubbo遵循SOA的思想&#xff0c;是面向服务架构的重要组件。 …

1708_Simulink中取数组元素

全部学习汇总&#xff1a; GitHub - GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes…

【多线程】线程安全问题原因与解决方案

目录 线程安全的概念 线程不安全示例 线程不安全的原因 多个线程修改了同一个变量 线程是抢占式执行的 原子性 内存可见性 有序性 线程不安全解决办法 synchronized 关键字-监视器锁monitor lock synchronized 的特性 互斥 刷新内存 可重入 synchronized 使用示例 Java 标…

【第三章:存储系统】

目录 知识框架No.0 引言No.1 存储器概述No.2 主存储器一、SRAM芯片和DRAM芯片二、只读存储器三、主存储器的基本组成1、基本的半导体元件和原理 知识框架 No.0 引言 这一章节主要是&#xff1a;这些二进制的数据在计算机内部如何存储 在学习这个章节之前&#xff0c;首先把下面…

Mybatis - 基础

文章目录 一、 Mybatis基本介绍二、 Mybatis 快速入门程序2.1 引入Mybatis依赖2.2 准备工作2.3 配置SQL信息2.3.1 IDEA连接数据库2.3.2 打开日志信息 2.4 JDBC 了解2.5 数据库连接池2.5.1 Druid数据库连接池 三、 Mybatis 基础3.1 环境准备3.1.1 数据库表3.1.2 实体类 3.2 基础…

EasyRecovery16中文最新版电脑数据恢复软件下载使用教程

EasyRecovery如果需要使用它来恢复数据&#xff0c;请注意&#xff0c;尤其是当需要恢复的数据文件非常重要时&#xff0c;建议使用软件EasyRecovery以保障数据安全。共有三个版本&#xff0c;分别是个人版、专业版、企业版&#xff0c;这三种都可以免费下载并使用&#xff0c;…

[MySQL]关于MySQL索引的一点点东西

最是人间留不住,朱颜辞镜花辞树. 目录 一.为什么需要索引 1.什么是索引 2.索引的创建原则 二.理解索引 1. MySQL与磁盘交互基本单位 2.索引的结构 a.关于hash索引,B树索引,B树索引的特点 B树 B树 HASH b.为什么使用InnoDB 存储引…

15-721 chapter 13 查询执行

优化的目标 CPU层面 cpu是多级流水线操作&#xff0c;所以我们的目标是让每个处理器的每个部分都处于busy。多条流水线&#xff0c;我们没有依赖的指令可以放到不同的流水线里面。但是流水线如果遇到branch判断错误的话&#xff0c;就要flush掉 可以用值传递来代替跳转 查询执…

Linux开发板安装Python环境

1. 环境介绍 硬件&#xff1a;STM32MP157&#xff0c;使用的是野火出的开发板。 软件&#xff1a;Debian ARM 架构制作的 Linux 发行版&#xff0c;版本信息如下&#xff1a; Linux发行版本&#xff1a;Debian GNU/Linux 10 内核版本&#xff1a;4.19.94 2. Python 简介…

基于常用设计模式的业务框架

前言 做开发也有好几年时间了&#xff0c;最近总结和梳理自己在工作中遇到的一些问题&#xff0c;工作中最容易写出BUG的需求就是改造需求了。一个成熟的业务系统是需要经过无数次迭代而成的&#xff0c;也意味着经过很多开发人员之手&#xff0c;最后到你这里&#xff0c;大部…

每日学术速递5.11

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Diffusion Explainer: Visual Explanation for Text-to-image Stable Diffusion 标题&#xff1a;扩散解释器&#xff1a;文本到图像稳定扩散的视觉解释 作者&#xff1a;Seongmin…

【数据结构】【算法】二叉树、二叉排序树、树的相关操作

树结构是以分支关系定义的一种层次结构&#xff0c;应用树结构组织起来的数据&#xff0c;逻辑上都具有明显的层次关系。 操作系统中的文件管理系统、网络系统中的域名管理、数据库系统中的索引管理等都使用了树结构来组织和管理数据。 树的基本概念 树Tree是由n个节点组成的有…

数据结构-查找-散列结构(散列表)

目录 *一、散列表 二、散列函数 *除留余数法 *直接定址法 数字分析法 平方取中法 三、冲突处理方法--开发定地法 *3.1线性探测法 *查找效率&#xff1a; *3.2平方探测法 3.3伪随机序列法 3.4再散列法 *一、散列表 又称哈希表&#xff0c;数据元素的关键字与其存储…

bgp团体属性配置案例一

RouterA的配置 sysname RouterA interface GigabitEthernet1/0/0 ip address 192.168.0.1 255.255.255.0 interface LoopBack0 ip address 1.1.1.1 255.255.255.255 bgp 10 router-id 1.1.1.1 //Router ID&#xff0c;建议配置为LoopBack0的IP地址 peer 192.168.0.2 as-number …

【Linux】信号的处理

信号篇终章 文章目录 前言一、信号的处理 1.可重入函数 2.volatile关键字 3.SIGCHLD信号总结 前言 在前两篇linux文章中我们详细的讲解了信号的产生和信号的保存&#xff0c;今天来到最后一个重点信号的处理&#xff0c;对于信号的处理我们会重新引入进程…

如何实现一个高效的H264信源编码器?了解核心算法和实现流程

H264 H264是一种常用的视频编码标准&#xff0c;它以网络传输和存储为设计目的&#xff0c;能够将视频信号进行高效压缩&#xff0c;并保持较高的视频质量。 H264视频编码标准采用的是基于帧的编码方式。每一帧视频都被分为不同的块&#xff0c;每个块中都包含了可压缩的信息…

11.PC端网页特效

PC端网页特效 1. 元素偏移量 offset 系列 1.1 offset 概述 offset 翻译过来就是偏移量&#xff0c; 使用 offset 系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等 获得元素距离带有定位父元素的位置获得元素自身的大小&#xff08;宽度高度&a…

03:MYSQL----DQL,聚合函数

目录 1:介绍 2:语法 3:聚合函数 4:DOL 语句练习 5:SQL执行顺序 1:介绍 数据查询语言&#xff0c;用来查询数据库中表的记录 2:语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后字段列表 order by 排序字段列表 limit 分页参…

Vben Admin 自学记录 —— 使用 mock 模拟数据以及模拟api联调接口(持续更新中...)

Vben Admin —— 使用 mock 模拟数据以及模拟api联调接口 数据 mock&联调相关概念及使用 练习 —— 在之前table基础上&#xff0c;使用mock模拟数据&#xff0c;替换原来的死数据&#xff0c;添加新增、查看、修改和删除api并添加逻辑&#xff0c;实现一个简单的、完整的…

《编程思维与实践》1067.小型组合数

《编程思维与实践》1067.小型组合数 题目 思路 法一: 注意到题目数据最大为 C 40 20 137846528820 C_{40}^{20}137846528820 C4020​137846528820在long long的范围内,所以其实可以不用大整数的处理方法去计算: 由于 C m n m ! n ! ( m − n ) ! m ( m − 1 ) . . . ( m −…