目录
(一)数组做函数参数
1.一维整型数组 做函数参数
形参 --- 数组形式 + 数组长度
实参 --- 数组名 + 数组长度
2.一维字符型数组 做函数参数
形参 --- 数组形式
实参 --- 数组名
原因: 一维字符型数组主要用来存储字符串数据 ,字符串操作的依据主要看结束标志 '\0'
而不是数组长度。
3.二维整型数组 做函数参数
形参 --- 数组形式 + 行数 (行数---本质上就是一维数组的长度 )
实参 --- 数组名 + 行数
4.二维字符型数组 做函数参数
形参 --- 数组形式 + 行数 //本质 就是一维数组的长度
实参 --- 数组名 + 行数
注意: (1)不要和一维字符型数组传参搞混 :
一维字符型数组,主要用来存放字符串数据,而字符串数据有结束标志('\0'),所以传参时,不需要传长度。
(2)二维字符型数组,用来存储多个字符串:
二维字符型数组要操作时,往往都是操作多个字符串,而多个字符串没有所谓结束的标志,主要看的是数组长度(行数)。
(二)标识符的作用域与可见性问题
1.作用域:名字作用的范围
(1)局部作用域:
{
//花括号范围内的就叫局部作用域
}
(2)全局作用域 :不在任何一个 {} 范围之内的
(3) 在局部作用域中定义的变量 --- 局部变量
①特点:局部变量的空间一般都开在栈上 ,如果不初始化,局部变量中的值是随机值(垃圾值)。
②生命周期:从程序运行到定义处开始存在,到程序运行到它作用范围结束时销毁。
(4)在全局作用域中定义的变量 --- 全局变量
①特点:全局变量的空间一般都开在全局区上 ,如果不初始化,全局变量中的值默认初始化为0。
②生命周期:从程序开始运行时就存在了,直到整个程序运行结束时销毁。
注意:全局变量和静态变量,不能用"变量"进行初始化。
2.可见性
标识符的可见性的规则:
①先定义,后使用 。
②同一作用域中,不能有同名标识符。
③在不同的作用域,同名标识符相互之间没有影响 。
⑤如果是不同的作用域,但是作用域之间存在嵌套关系,则内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。(就近原则)
3.存储类别的关键字
(1)auto:表示它是一个自动变量 (局部变量) --- 空间自动申请,自动释放 。
(2)static:修饰局部变量时,变量会被放在全局区(静态区),此时局部变量的生命周期被延长。 注意:①static 修饰局部变量时只会被初始化一次 ;②static 修饰的变量具有继承性;③static 修饰的变量只能用常量初始化 (不能用变量初始化) ④static 修饰全局变量时,表示变量限定作用域为本文件,别的文件不能通过extern来声明使用;⑤static 修饰函数时,表示函数限定作用域为本文件,别的文件不能通过extern来声明使用。
(3)register:表示把变量存储寄存器中。(register 修饰的变量不能做取地址运算)
(4)extern:表示变量是存在外部的,不在当前文件中。(只能声明全局变量 )
(三)部分代码总结
1.实现puts()功能的函数
void Puts(char s[])
{
int i = 0;
while(s[i] != '\0')
{
printf("%c",s[i]);
++i;
}
putchar('\n');
}
2.实现gets()功能的函数
void Gets(char s[])
{
int i=0;
while((s[i]=getchar()) != '\n')
{
i++;
}
s[i] = '\0';
}
3.实现strlen()功能的函数
int Strlen (char s[])
{
int i=0;
int count=0;
while(s[i]!='\0')
{
i++;
count++;
}
return count;
}
4.实现strcpy()功能的函数
void Strcpy(char dest[], char src[])
{
int i=0;
while(src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
}
5.实现strcat()功能的函数
void Strcat(char dest[],char src[])
{
int i;
int j=0;
while(dest[i]=='\0')
i++;
while(src[j]!='\0')
{
dest[i]=src[j];
i++;
j++;
}
dest[i]='\0';
}
6.实现strcmp()功能的函数
int Strcmp(char s1[], char s2[])
{
int i=0;
while(s1[i]==s2[i] && s1[i]!='\0' && s2[i]!='\0')
{
i++;
}
return s1[i]-s2[i];
}