目录
函数参数
(1)一维整型数组做函数参数
形参 ----- 数组形式 + 数组长度
int sum (int a[])
实参 ----- 数组名 + 数组长度
int a[5];
(2)一维字符型数组做函数参数
一维字符型数组 --- 用来存放字符串 。因为处理的是字符串数据,字符串操作的依据,主要看结束标志 '\0',而不是数组长度
形参 数组形式
(1)void Puts(char *s) //两种表达形式都可以
(2)void Puts(char s[])
实参 数组名
char s2[100];
示例代码:
#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[100] = "world";
Puts(s); //函数调用
return 0;
}
运行结果:
world
(3)二维整型数组做函数参数
形参 --- 二维数组形式 + 行数 (本质 一维数组 + 长度)
int sum(int (*a)[4],int row) // int row = sizeof(a)/sizeof(a[0]);求行数
实参 --- 数组名 + 行数
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
示例代码:
#include<stdio.h>
void printArray(int (*a)[4],int row)
{
int i,j;
for(i = 0;i < row; ++i)
{
for(j = 0;j < 4;++j)
{
printf("%02d ",a[i][j]);
}
putchar('\n');
}
}
int main(void)
{
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int row = sizeof(a)/sizeof(a[0]);
printArray(a,row);
return 0;
}
运行结果:
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16
(4)二维字符数组做函数参数
注意:
①不要和一维字符型数组传参搞混
一维字符型数组,主要用来存放字符串数据
而字符串数据有结束标志('\0'),故,传参时,不需要传长度
②二维字符型数组,用来存储多个字符串
要操作时,往往都是操作多个字符串,而多个字符串没有所谓结束的标志,要看的是数组长 度 (即行数)。
形参 ----- 二维数组形式 + 行数 (本质 一维数组 + 长度)
void printStr(char s[][10],int row)
实参 ----- 数组名 + 行数
char s[4][10];
示例代码:
#include<stdio.h>
#include<string.h>
void printStr(char s[][10],int row)
{
int i;
for(i = 0;i < row;++i)
{
puts(s[i]);
}
}
int main(void)
{
char s[4][10] = {"aaa","bbb","ccc","ddd"};
int row = sizeof(s)/sizeof(s[0]);
printStr(s,row);
return 0;
}
运行结果:
aaa
bbb
ccc
ddd
局部变量和全局变量
标识符 的作用域与可见性问题:
作用域
名字作用的访问
局部作用域 :
{
} //花括号范围内就叫局部作用域
在局部作用域定义的变量 --- 局部变量
在全局作用域定义的变量 --- 全局变量
全局作用域 :
不在 任何一个 {} 范围之内
可见性
程序运行到某一个位置 哪些名字可以被使用(被看见)
局部变量
特点:
局部变量空间-----一般都开栈上
如果不初始化,局部变量中的值是随机值(垃圾值)
局部变量的生命周期:
从程序运行到定义处开始存在,到程序运行到它作用范围结束时,销毁
全局变量
全局变量空间-----全局区
如果不初始化,默认初始化为0
从程序开始运行时就存在了,直到整个程序运行结束时,销毁
注意:
全局变量和静态变量,不能用"变量"进行初始化。
标识符的可见性的规则:
①先定义,后使用 。
②同一作用域中,不能有同名标识符。
③在不同的作用域,同名标识符,相互之间没有影响。
④如果是不同的作用域,但是作用域之间存在嵌套关系, 则内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。 (就近原则)
存储类别的关键字
定义格式一般为: [存储类别] 类型 变量名;
(1)auto :表示它是一个自动变量 (局部变量) --- 自动申请 自动释放
(2)static :static 修饰局部变量 此时会被放在全局区(静态区),局部变量的生命周期被延长 。
注意:
① static 修饰局部变量 --只会被初始化一次
② static 修饰的变量 -- 具有继承性
③ static 修饰的变量 -- 只能用常量初始化 (不能用变量初始化)
变量
局部变量 ----- 表示将局部变量存放到静态区,延长声明周期,存在静态区的变量。
a.不能用变量初始化
b.只会被初始化一次
c.反复使用该变量时,值具有继承性。
全局变量 ----- 限定作用域为本文件,别的文件不能通过extern来声明使用
函数
限定作用域为本文件,别的文件不能通过extern来声明使用
(3)register :寄存器 ,表示把变量存储寄存器中 。register 修饰的变量 ,不能做 & (取地址)。
(4)extern : 外部的 ----- 表示变量是存在外部的(可用于多文件编程)。不在当前文件中,只 能声明全局变量 。