文章目录
- 一维数组
- 二维数组
- 二维数组做函数参数:
- 二维字符数组:
- 做函数参数:
- 标识符的作用域和可见性问题:
- 作用域详解:
- 作用域的分类:
- 标识符的可见性规则:(即标识符的使用规则)
- 从内存的五个区域来理解标识符:
- 从生命周期来理解标识符:
- 存储类别的关键词:(主要更改变量的生命周期)
- static用来修饰局部变量,他会被放在全局区(静态区)
- static用于修饰全局变量时:
- 当用于修饰函数时:
一维数组
一维整形数组传参所需要的两个部分:
实参:数组名 + 数组长度(数组长度以另一个参数的形式传到函数中)。
形式参数:需要用于接收实参数组名的一维度变量,以及用于接收数组长度的整形变量。
一维字符型数组作为实参时,由于其存的是字符串,因此对里面元素的使用则是通过以结束标志位\0
作为结束标志,不用再考虑数组长度。
零散知识点:
注意:对于调用输入函数接收数据的注意事项。
诸如如while(getchar() > n )//该语句会影响完整拿取缓冲区数据
{
a[i] = getchar();
i++;
}
因为无格式输入函数getchar()是一个不进行格式匹配拿取缓冲区字符的过程,缓冲区字符是有限的,拿取就没了。如果在判断过程中使用了getchar()函数就相当于把这个函数拿了出来进行了一个判断之后就给他丢了(内存释放),没有将其放在新的字符数组a之中。所以在考虑以一个一个字符给到字符数组之中时,特别要注意以上的误区。
二维数组
二维数组做函数参数:
形参的组成元素:二位数组形式的类型 + 行数
实参:数组名 + 行数
eg:
函数头形式:
void Test(int a[][l],int row)//函数的声明以及形式参数构成
主函数调用形式:
int a[r][l];
Test(a,r);//调用实参形式
二维字符数组:
做函数参数:
其形式与二维整形数组形式相同
eg:
函数头形式:
void Test(char a[][l],int row)//函数的声明以及形式参数构成
主函数调用形式:
char a[r][l];
Test(a,r);//调用实参形式
注意:
1.不要和一维字符型数组传参搞混
一维字符型数组,主要用来存放字符串数据
而字符串之中有结束标志位\0
,所以传参数时不需要传长度。
2.二维字符串数组用来存放多个字符串
因此不能够用结束标志位作为操作依据,而应该以数组行的长度作为操作依据。
标识符的作用域和可见性问题:
概念介绍:
-----作用域:指的是某变量名所能作用的范围。
-----可见性:程序运行到某个位置,那些名字可以被使用(被看见)。
作用域详解:
作用域的分类:
----局部作用域:即{ }
花括号范围之内包着的就叫做函数的局部作用域。
在局部作用域中定义的变量:叫做局部变量
在全局作用域中定义的变量:叫做全局变量
----全局作用域:
不在任何{ }
之内的,就叫做全局作用域。
标识符的可见性规则:(即标识符的使用规则)
1.标识符必须先定义后使用。
2.同一个作用域之中,不能有同名标识符。
3.在不同的作用域中,同名的标识符,互相之间没有影响。
4.如果是不同的作用域,但是作用域之间存在嵌套关系,则实际的使用用法参考就近原则(即内层的同名作用域标识符会屏蔽外层作用域的标识符)
从内存的五个区域来理解标识符:
1.栈 用来存放运行程序的数据,局部变量(标识符)一般存放在这个位置
2.堆 【数据区】
3.字符串常量区
4.静态区(全局区)
5.代码区
从空间角度理解:
-----局部变量:局部变量的空间一般都开在栈上
如果不进行初始化那么其局部变量的值都只是随机值。
-----全局变量:全局变量存放在全局区(静态区)如果不进行初始化,那他的值会默认为0。
从生命周期来理解标识符:
定义:关注两个时间点,标识符什么时候被开出一片空间使用,以及什么时候该空间会被销毁,其中这两个时间点的时间范围就是其生命周期。
----局部变量的生命周期:
从程序运行到该标识符的定义处开始存在,直到程序运行到其作用的范围结束时才被销毁。
— 全局()静态变量的生命周期:
从程序运行开始就存在,直到主程序结束时才会被销毁。
注意:全局变量和静态变量不能够用“变量”来进行初始化。
存储类别的关键词:(主要更改变量的生命周期)
auto ——表示该变量是一个自动变量(局部变量)----其自动申请,自动销毁
static——
static用来修饰局部变量,他会被放在全局区(静态区)
此时该局部变量的生命周期会被延长。
注意:
1.static修饰局部变量只会被初始化一次,
2.static修饰的变量具有继承性
3.static修饰的变量只能用常量来进行初始化。(不能用变量来进行初始化)
static用于修饰全局变量时:
表示限定全局变量的作用域位于本文件,别的文件不能通过extern来声明使用。
用途:用于保护私有数据防止被引用
register——意思:寄存器,其标志把变量存放在寄存器中(将变量存放在寄存器中能让变量读取的更快,重复使用次数特别大时,能够节省寄cpu到内存的拿取时间)
—————其具有建议性:是否能够被编译器放在寄存器中取决与编译器认为是否有必要
当用于修饰函数时:
其作用和修饰全局变量的作用是相同的
限定作用域为本文件,别的文件不能够用extern来进行声明使用。
extern ———(意思:外部的)
修饰变量时:
其表示变量是存在于外部的。即变量不存在于本c文件之中
其常用于多文件编程并且只能用于声明全局变量不能用于声明局部变量。
修饰函数时:声明函数是在别的文件中被定义。