当前位置: 首页 > news >正文

函数function3

数组做函数参数

一维整型数组做函数参数

定义:形参——数组形式+数组长度

调用:实参——数组名+数组长度

一维字符型数组做函数参数

一维字符型数组——用来存放字符串

因为字符型数组处理时长度可以由字符串的终止符 '\0 '自动确定,所以数组长度不用作为参数传入

定义:形参——数组形式

调用:实参——数组名

#include<stdio.h>void Puts(char s[])
{ 
int i = 0;while(s[i] != '\0'){printf("%c",s[i]);++i;}putchar('\n');
}
int main(void)
{char s[] = "hello";Puts(s);return 0;}

二维整型数组做函数参数

形参—— 二维数组形式 + 行数  (本质 :一维数组 + 长度)
实参—— 数组名+ 行数    

二维字符型数组做函数参数

定义:形参——二维数组形式+行数

调用:实参——数组名+行数

做函数参数与整型二维数组使用方法相同

注意:不要与一维字符型数组传参搞混

1.不要和一维字符型数组传参搞混
一维字符型数组,主要用来存放字符串数据而字符串数据有结束标志(0')故,传参时,不需要传长度

  2.二维字符型数组,用来存储多个字符串
       要操作时,往往都是操作多个字符串,而多个字符串没有所谓结束的标志。
       看的是数组长度(行数)

一维整型数组

形参——数组形式+数组长度

实参——数组名+数组长度

一维字符型数组(主要用来存储字符串类型)

形参——数组形式

实参——数组名

二维整型数组

形参——数组形式+行数(本质是一维数组的长度)

实参——数组名+行数

二维字符型数组

形参——数组形式+行数(本质是一维数组的长度)

实参——数组名+行数

C语言程序的5个区域

数据区:栈、堆、字符串常量区、全局区(静态区)

代码区

标识符的作用域与可见性问题

作用域

名字作用的范围

局部作用域

{

        花括号范围内就叫局部作用域

}

局部变量

在局部作用域 定义的变量

空间一般都开在栈上,如果不初始化,局部变量的值是随机值(垃圾值)

全局作用域

不在任何一个花括号{ }范围内

函数的作用域都是全局的

全局变量

在全局作用域 定义的变量

空间在全局区,如果不初始化,系统默认初始化为0

变量的生命周期(时间角度)

int a;

什么时候a的空间被开辟?什么时候a的空间被销毁?

局部变量的生命周期

从程序运行到定义处开始存在,到程序运行到它作用范围结束时销毁

全局变量(静态变量)的生命周期

从程序开始运行时就存在,直到整个程序运行结束时销毁

注意:全局变量和静态变量都不能用变量初始化

#include<stdio.h>int a = 20;//全局变量int main(void)
{int a = 10;//局部变量{int a = 30;//局部变量printf("%d",a);//30} printf("%d",a);//10return 0;
}

可见性

程序运行到某一个位置 哪些名字可以被使用(被看见)

标识符的可见性的规则:
 1.先定义,后使用
 2.同一作用域中,不能有同名标识符
 3.在不同的作用域,同名标识符,相互之间没有影响                                                                       4.如果是不同的作用域,但是作用域之间存在嵌套关系,则,内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。(就近原则)

存储类型的关键字

[存储类别] 类型 变量名;

auto       

表示是一个自动变量(局部变量)——空间在栈上、自动申请,自动释放

static     

表示是一个静态变量

static修饰局部变量

此时会被放在全局区(静态区),此时局部变量周期被延长

注意:static修饰局部变量——只会被初始化一次

           static修饰的变量——具有继承性(反复使用该变量时,值具有继承性)

           static修饰的变量——只能用常量初始化,不能用变量初始化

static修饰全局变量

表示限定全局变量的作用域位于本文件,别的文件不能通过extern声明使用

——用途:保护私有数据,防止被引用

static修饰函数

作用和修饰全局变量一致

static 修饰函数时,函数的作用域被限制在声明它的文件内,其他文件不能通过 extern 声明来引用这个函数。这有助于实现函数的封装,防止函数被外部文件调用。

register 

在 C 语言中,register 关键字用于提示编译器将变量尽量存储在寄存器中,以提高访问速度。由于寄存器的访问速度比内存快,所以将频繁使用的变量存储在寄存器中可以提高程序的执行效率。然而,register 关键字只是一个建议,编译器可能会忽略它。

register 的特点

  1. 频繁使用的变量:通常用于需要频繁访问的变量,如循环计数器。
  2. 不能取地址:用 register 声明的变量不能取地址,即不能使用 & 运算符。
  3. 作用范围:只能用于局部变量和函数参数,不能用于全局变量。
  4. 存储限制:由于寄存器数量有限,编译器可能会忽略 register 提示,并将变量存储在内存中。

extern

外部的,表示变量是存在外部的,不在当前文件中,只能声明全局变量

在 C 语言中,extern 关键字用于声明外部变量或函数,这意味着变量或函数在其他文件中定义。使用 extern 关键字可以在一个文件中引用另一个文件中定义的全局变量或函数。

  • 明确性:虽然在某些情况下可以省略 extern(默认是声明,但为了代码的可读性和明确性,建议显式使用 extern 关键字。
  • 全局变量extern 只能用于声明全局变量,不能用于局部变量。
  • 跨文件访问extern 关键字非常适合在多个文件中共享变量和函数。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
  • 量化金融人都在看哪些顶刊
  • C#--DirectShowLib 关闭自动白平衡和自动曝光时间
  • MATLAB基础操作(二)
  • Vue Router 详解:让你的单页面应用(SPA)畅行无阻
  • Flink 实时数仓(五)【DWD 层搭建(三)交易域事实表】
  • 数据结构与算法 - 优先级队列、阻塞队列
  • 我对于内存相关的三个问题的理解和总结——内存泄漏、内存溢出、野指针
  • 宏景eHR /ajax/ajaxService SQL注入漏洞复现
  • 【时时三省】unity test 测试框架 使用 code blocks 移植
  • 如何解决C#字典的线程安全问题
  • 40.组合综合Ⅱ
  • 【JavaEE精炼宝库】 网络编程套接字——UDP业务逻辑 | TCP流套接字编程及业务逻辑实现
  • 沉浸式企业VR展厅,重塑企业形象展示方式!
  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、设计模式开发实例汇总专栏分享
  • python3.6+scrapy+mysql 爬虫实战
  • 2017 年终总结 —— 在路上
  • 2017-09-12 前端日报
  • AWS实战 - 利用IAM对S3做访问控制
  • CSS盒模型深入
  • Druid 在有赞的实践
  • JavaScript的使用你知道几种?(上)
  • JAVA并发编程--1.基础概念
  • Mysql数据库的条件查询语句
  • Python连接Oracle
  • v-if和v-for连用出现的问题
  • vue-cli3搭建项目
  • Vue组件定义
  • 高性能JavaScript阅读简记(三)
  • 前端面试总结(at, md)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 走向全栈之MongoDB的使用
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • (二)springcloud实战之config配置中心
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (四)c52学习之旅-流水LED灯
  • (四)React组件、useState、组件样式
  • (五)关系数据库标准语言SQL
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .cn根服务器被攻击之后
  • .gitignore文件使用
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8.0 发布到 IIS
  • .NET CLR基本术语
  • .NET gRPC 和RESTful简单对比
  • .Net mvc总结
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换