嵌入式学习第十一天——字符型数组做函数参数与标识符的深入学习

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

因为处理的是字符串数据,字符串操作的依据,主要看结束标志'\0'而不是数组长度

二维数组做函数参数
总结:
    形参 —— 二维数组形式 + 行数
    实参 —— 数组名 + 行数

练习

数组的插入排序

void insertStr(char s[][10],int row)
{
	int i,j;
	char temp[10];

	for(i = 1;i < row;i++)
	{
		strcpy(temp,s[i]);
		j = i;
		while(j > 0 && strcmp(temp,s[j-1]) < 0)
		{
			strcpy(s[j],s[j-1]);
			j--;
		}
		strcpy(s[j],temp);
	}

}

strlen,strcpy,strcat,strcmp

在不调用库函数的情况下实现strlen,strcpy,strcat,strcmp四个函数的功能

int Strlen(char s[])
{
	int i=0;

	while(s[i] != '\0')
	{
		i++;
	}

	return i;
}

void Strcpy(char dest[],char src[])
{
	int i=0;

	while(src[i] != '\0')
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
}

void Strcat(char dest[],char src[])
{
	int i=0,j=0;
	while(dest[i] != '\0')
	{
		i++;
	}
	while(src[j] != '\0')
	{
		dest[i] = src[j];
		i++;
		j++;
	}

	dest[i] = '\0';
}

int Strcmp(char s1[],char s2[])
{
	int i = 0;
	while(s1[i] == s2[i] && s1[i] != '0' && s2[i] != '\0')
	{
		i++;
	}

	i = s1[i] -s2[i];
	
	return i;
}

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

    做函数参数与二维整形数组 使用方式相同
    
注意:1.不要和一维字符型数组传参搞混
       一维字符型数组,主要用来存放字符串数据,而字符串数据有结束标志('\0')故,传参是,不需要串长度
       2.二维字符型数组,用来存储多个字符串
        要操作时,往往都是操作多个字符串,而多个字符串没有所谓的结束标志。看的是数组长度(行数)

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

作用域:

        名字作用的范围
可见性:
        程序运行到某一个位置,哪些名字可以被使用(被看见)

作用域:
    局部作用域
    {
    
    } //花括号范围内 就叫局部作用域
    在局部作用域定义的变量——局部变量
    在全局作用域定义的变量——全局变量
    全局作用域
        不在任何一个花括号范围之内

标识符的可见性规则 

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

空间角度

局部变量
    特点:局部变量空间一般都开在栈上
        如果不初始化,局部变量在的值是随机值(垃圾值)
全局变量
    特点:全局变量空间开在全局区
        如果不初始化,全局变量会默认初始化为0

时间角度
    生命周期
    int a;  //什么时候a的空间被开辟,什么是a的空间被销毁

局部变量的生命周期
    从程序运行到定义处开始存在,到程序运行到它的作用范围结束时销毁
全局变量的生命周期
    从程序开始运行时就存在了,直到整个程序运行结束时销毁
注意:全局变量和静态变量,不能用“变量”进行初始化

存储类别的关键字:

    auto    //表示它是一个自动变量(局部变量)--- 自动申请 自动释放
    static    //修饰局部变量 此时会被放在全局区(静态区)
            //此时局部变量的生命周期被延长
            //注意:
            1.static修饰局部变量 --只会被初始化一次  2.static修饰的变量 -- 具有继承性     3.static修饰的变量 -- 只能用常量初始化
    register    //表示把变量存储在寄存器
            //register修饰的变量不能做&(取地址)
    extern    //表示变量是存在外部的,不在当前文件中
            //只能声明全局变量
            //static修饰全局变量,表示限定全局变量的作用域为本文件,别的文件不能通过extern来声明使用        用途:保护私有数据,防止被引用
            修饰函数//声明函数在别处定义的        static修饰函数与修饰全局变量作用相同, 限定作用域为本文件,别的文件不能通过extern来声明使用
[存储类别] 类型 变量名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值