C语言入门(第三天:函数、指针)

news2025/5/22 21:03:44

一、函数

1.1 函数概述

  • 作用:提高代码的编写效率,实现对代码的重用

  • 函数使用步骤

    • 定义函数

      • 理解为制作工具,工具只需要制作1次即可

    • 调用函数

      • 理解为使用工具

1.2 无参无返回值

1.3 有参无返回值(重点)

  • 函数参数的作用:增加函数的灵活性

    • 可以根据需求在调用函数时, 通过参数传入不同的数据

1.4 有参有返回值

1.4.1 返回值基本语法(重点)
  • 函数返回值的作用:函数外部想使用函数内部的数据

1.4.2 返回值注意点
  • return的作用是结束函数

    • 函数内,return后面的代码不会执行

1.5 函数的声明

  • 如果函数定义代码没有放在函数调用的前面,这时候需要先做函数的声明

  • 所谓函数声明,相当于告诉编译器,函数是有定义的,再别的地方定义,以便使编译能正常进行

  • 注意:一个函数只能被定义一次,但可以声明多次

1.6 函数案例

需求:自定义一个函数,返回2个整数的最大值

1.7 局部和全局变量

1.7.1 局部变量
  • 定义在函数内部的变量称为局部变量(Local Variable)

  • 局部变量的作用域(作用范围)仅限于函数内部, 离开该函数后是无效的

    • 离开该函数后,局部变量自动释放

1.7.2 全局变量
  • 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件

1.8 多文件编程(重点)

  • 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件

  • 在头文件对应的xxx.c中实现xxx.h声明的函数

防止头文件重复包含:

  • 当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含。

  • 为了避免同一个文件被include多次,C/C++中有两种方式。

  • 方法一:

#ifndef __SOMEFILE_H__ 
#define __SOMEFILE_H__ 

// 声明语句 

#endif
  • 方法二(嵌入式不能用):

#pragma once // 声明语句

头文件包含的区别:

  • <> 表示系统直接按系统指定的目录检索

  • "" 表示系统先在 "" 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索

多文件编程运行结果出现中文乱码:在命令行输入:chcp 65001 再编译执行。

二、指针

2.1 基本语法

2.1.1 指针变量的定义和使用(重点)
  • 指针也是一种数据类型,指针变量也是一种变量

  • 指针变量指向谁,就把谁的地址赋值给指针变量

2.1.2 通过指针间接修改变量的值
  • 指针变量指向谁,就把谁的地址赋值给指针变量

  • 通过 *指针变量 间接修改变量的值

2.1.3 const修饰的指针变量

  • 语法格式

    int a = 1;
    const int *p1 = &a;	// 等价于 int const *p1 = &a;
    int * const p2 = &a;
    const int * const p3 = &a;

    从左往右看,跳过类型,看修饰哪个字符

  • 如果是*, 说明指针指向的内存不能改变

  • 如果是指针变量,说明指针的指向不能改变,指针的值不能修改

2.1.4 指针大小
  • 使用sizeof()测量指针的大小,得到的总是:4或8

  • sizeof()测的是指针变量指向存储地址的大小

    • 在32位平台,所有的指针(地址)都是32位(4字节)

    • 在64位平台,所有的指针(地址)都是64位(8字节)

2.1.5 指针步长
  • 指针步长指的是通过指针进行递增或递减操作时,指针所指向的内存地址相对于当前地址的偏移量。

  • 指针的步长取决于所指向的数据类型。

    • 指针加n等于指针地址加上 n 个 sizeof(type) 的长度

    • 指针减n等于指针地址减去 n 个 sizeof(type) 的长度

2.1.6 野指针和空指针
  • 指针变量也是变量,是变量就可以任意赋值

  • 任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针

    • 此指针指向的区域是未知(操作系统不允许操作此指针指向的内存区域)

  • 野指针不会直接引发错误,操作野指针指向的内存区域才会出问题

  • 为了标志某个指针变量没有任何指向,可赋值为NULL

    • NULL是一个值为0的宏常量

2.1.7 多级指针
  • C语言允许有多级指针存在,在实际的程序中一级指针最常用,其次是二级指针。

2.2 指针和函数

2.2.1 函数参数传值
  • 传值是指将参数的值拷贝一份传递给函数,函数内部对该参数的修改不会影响到原来的变量

2.2.2 函数参数传址(重点)
  • 传址是指将参数的地址传递给函数,函数内部可以通过该地址来访问原变量,并对其进行修改。

总结:
   /**
     * 函数概念:把具有某些功能的代码 封装到一起
     * 函数作用:提高带的复用率
     * 函数的类型:无参无返回值  有参无返回值   有参 有返回值的
     * 函数的返回类型: void  int ……  ---->return 数据类型 就是你的函数的返回类型
     * 局部变量和全局变量
     * 局部变量:定义在{}中的变量  生效的范围 也是在{}中    生命周期:{}代码执行完  变量就销毁了
     * 全局变量:定义在函数外部的变量  生效的范围 是整个文件  生命周期 :程序执行完成
     * 指针:是一种数据类型  int *p      int 类型的指针 p是指针变量名称  指针指向的是地址空间
     * int a = 10; int *p = &a;
     * 输出指针的值 *p  输出地址是 p
     * 通过指针修改变量的值
     * int a = 10; int *p = &a; *p = 23;
     * const 修饰谁 谁就不能修改  (跳过类型)  const int *p  *p 不能修改 p可以修改
     * 指针的大小:
     * 看平台 32还是64  32 4字节  64 8字节  指针大小通过sizeof 查看
     * 步长:
     * 步长是指针增加或者减少1个单位的偏移量  步长和类型有关系 char 步长 1字节  int 步长 4字节
     * 野指针:给指针赋值一个未知地址空间   不能修改空间地址的值  编译会报错
     * 空指针:定义一个未指向任何地址的指针   可以使用NULL初始化  空指针  #define NULL 0
     * 多级指针:例如:二级指针可以存储一级指针变量的地址  三级指针,可以存储二级指针变量的地址
     *
    */

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

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

相关文章

怎么提升公众号上限

正常可以申请多少个公众号&#xff1f;目前如果我们是企业主体的话&#xff08;包括个体户&#xff09;&#xff0c;申请公众号默认是可以申请2个公众号数量的。不过对于很多公司来说&#xff0c;2个公众号的数量肯定是远远不够用的&#xff0c;不同的产品不同品牌不同部门都可…

基于R语言实现的beta二项回归模型【理解与实现】

本实验&#xff0c;创建一组使用二项分布模拟的数据&#xff08;不带额外的随机性&#xff09;&#xff0c;和另一组使用Beta二项分布模拟的数据&#xff08;引入了随机成功概率 p&#xff0c;从而增加了数据的离散性。 现在假设我们站在上帝视角&#xff0c;有两组不知道分布…

【可能是全网最丝滑的LangChain教程】七、LCEL表达式语言

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍-CSDN博客 【可能是全网最丝滑的LangChain教程】二、LangChain安装-CSDN博客 【可能是全网最丝滑的LangChain教程】三、快速入门LLM Chain-CSDN博客 【可能是全网最丝滑的LangChain教程】四、快速入门Re…

Oracle ORA-28547:connection to server failed,probable Oracle Net admin error

使用Navicat连接oracle数据库时报ORA-28547错误 因为Navicat自带的oci.dll并不支持oracle11g&#xff0c;需要去官网下载支持的版本。 1.去oracle下载对应的oci.dll文件 下载地址&#xff1a;Oracle Instant Client Downloads 可以用 11.2.0.4 2. 复制刚下载下来的instant…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

嵌入式第三天:(C语言入门)

目录 一、跳转关键字 break&#xff1a; continue&#xff1a; goto&#xff1a; 二、函数 概述&#xff1a; 函数的使用&#xff1a; 无参无返回值&#xff1a; 有参无返回值&#xff1a; 有参有返回值&#xff1a; 返回值注意点&#xff1a; 函数的声明&#xff…

微信跳转页面时发生报错

报错如下图所示&#xff1a; 解决方法&#xff1a;&#xff08;从下面四种跳转方式中任选一种&#xff0c;哪种能实现效果就用哪个&#xff09; 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

Linux: softirq 简介

文章目录 1. 前言2. softirq 实现2.1 softirq 初始化2.1.1 注册各类 softirq 处理接口2.1.2 创建 softirq 处理线程 2.2 softirq 的 触发 和 处理2.1.1 softirq 触发2.1.2 softirq 处理2.1.2.1 在 中断上下文 处理 softirq2.1.2.2 在 ksoftirqd 内核线程上下文 处理 softirq 3.…

[lesson26]类的静态成员函数

类的静态成员函数 静态成员函数 在C中可以定义静态成员函数 静态成员函数是类中特殊的成员函数静态成员函数属于整个类所有可以通过类名直接访问公有静态成员函数可以通过对象名访问公有静态成员函数 静态成员函数的定义 直接通过static关键字修饰成员函数 静态成员函数 vs…

4.Godot图片素材的获取和编辑

游戏开发中经常遇到图片素材的需求 1. 图片素材的准备 术语&#xff1a;Sprite 精灵&#xff0c;游戏开发中指一张图片来源不明的图片&#xff0c;切勿在商业用途使用&#xff0c;以免引起版权风险。 1. 在学习阶段&#xff0c;可以百度或者从一些资源网站获取&#xff0c;这…

Unity类银河恶魔城学习记录12-13 p135 Merge Skill Tree with Dogge skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​​​​​​ Inventory.cs using System.Collections.Generic; using Un…

分布式结构化数据表Bigtable

文章目录 设计动机与目标数据模型行列时间戳 系统架构主服务器Chubby作用子表服务器SSTable结构子表实际组成子表地址组成子表数据存储及读/写操作数据压缩 性能优化局部性群组&#xff08;Locality groups&#xff09;压缩布隆过滤器 Bigtable是Google开发的基于GFS和Chubby的…

Apple:叠加提示 - 高效的 RAG 优化方式

发表机构&#xff1a;Apple 本文介绍了一种新的检索增强生成&#xff08;RAG&#xff09;提示方法——叠加提示&#xff08;superposition prompting&#xff09;&#xff0c;该方法可以直接应用于预训练的基于变换器的大模型&#xff08;LLMs&#xff09;&#xff0c;无需微调…

cmake制作并链接动静态库

cmake制作并链接动静态库 制作静态库add_library(库名称 STATIC 源文件1 [源文件2] ...)LIBRARY_OUTPUT_PATH指定库的生成路径 制作动态库add_library(库名称 SHARED 源文件1 [源文件2] ...) 连接动静态库link_libraries连接静态库link_directories到哪个路径去找库target_link…

ssh爆破服务器的ip-疑似肉鸡

最近发现自己的ssh一直有一些人企图使用ssh暴力破解的方式进行密码破解.就查看了一下,真是网络安全太可怕了. 大家自己的服务器密码还是要设置好,管好,做好最基本的安全措施,不然最后只能沦为肉鸡. ssh登陆日志可以在/var/log下看到,ubuntu的话为auth.log,centos为secure文件 查…

ubuntu 应用程序设置 开机自启动

1. 通过.desktop方式 autostart 中.desktop 配置文件 1.1 用户级自启动 登录后才可以启动服务。 可视化配置&#xff1a;在ubuntu自带的可视化程序来配置&#xff0c;就是StartupApplications&#xff0c;它在启动台中可以找到。 在ubuntu下目录是 ~/.config/autostart 添…

kotlin项目引用

概要&#xff1a; 记录项目引用kotlin具体事项 1 object下build.gradle buildscript {//声明引用版本ext.kotlin_version "1.4.20"repositories {google()mavenCentral()}dependencies {classpath "com.android.tools.build:gradle:4.2.0"//引用kotlinc…

DataX案例,MongoDB数据导入HDFS与MySQL

【尚硅谷】Alibaba开源数据同步工具DataX技术教程_哔哩哔哩_bilibili 目录 1、MongoDB 1.1、MongoDB介绍 1.2、MongoDB基本概念解析 1.3、MongoDB中的数据存储结构 1.4、MongoDB启动服务 1.5、MongoDB小案例 2、DataX导入导出案例 2.1、读取MongoDB的数据导入到HDFS 2…

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…

【网络编程】高性能并发服务器源码剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之洪水网络攻击&#xff0c;在这篇文章中&#xff0c;你将会学习到在网络编程中如何搭建一个高性能的并发服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&#xf…