函数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);//10
    return 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 关键字非常适合在多个文件中共享变量和函数。

  • 33
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值