数组和函数

数组和函数
一:数组
按数组元素的类型可以分为:
字符数组 char a[10];
数值数组:

short int a[10];
int a[10]
float a[10]
double a[10]

指针数组
char *a[10]//定义了一个指针数组有10个字符指针变量
其他类型类似
结构体数组

struct stu {
     成员列表
};

struct stu edu[10]//定义了一个结构体数组有十个结构体变量

按维数分为一维数组、二维数组、多维数组

int a[10];//一维数组
int a[3][5]//二维数组
int a[3][4][5]//三维数组

数组的概念:数组是一个构造数据结构 有多个元素构成,注意多个元素在内存中
连续存储,多维数组概念上是多维的,其实在内存中也是连续存储的。

数组的定义
定义方法:类型名+ 数组名 + [元素个数]
int a[10];
注意:数组名字代表数组的首地址,也就是第0个元素的地址,它是个常量。
该数组有十个元素分别a[0]~a[9]
使用数组的时候不要溢出

数组的初始化
int a[10]={1,2,3};
可以全部初始化,也可以部分初始化,如果只初始化一部分,剩余元素的值默认是0
如果给全部元素初始化,在定义数组的时候可以不给出个数
int a[]={1,2,3,4,5};//数组a有5个元素,根据初始化的个数来定数组的大小。

字符数组的初始化方法有两种
char a[]={‘h’,‘e’,‘l’,‘l’,‘o’};//用字符逐个初始化,该数组有5个元素
char a[]=“hello”//用字符串给数组初始化,注意如果用字符串的话最后一个是\0
//该数组有6个元素。
数组元素引用
数组名+[下标]
多维数组元素的引用会有多个下标
int a[3][5];
a[2][2];

注意:如果全局数组不初始化,所有的元素的值是0
局部数组如果不初始化,所有的元素的值是不确定
局部数组:在函数内部定义的或者在复合语句中定义的数组,被称为局部数组
局部数组在定义的范围内有效。
普通局部数组,生命周期是它所在的函数或复合语句
全局数组:
在函数外边定义的数组是全局数组
全局数组的生命周期是整个程序的运行过程数组一直存在。

二:函数
函数是c语言的功能单位,实现一个功能可以封装一个函数来实现。
定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。
1:函数的定义:
类型名 函数名(形参列表)
{//函数体

}

int max(int a,int b)
{
    
}

注意函数的定义不能嵌套定义,也就是,所有的函数都是平行的。
不能在一个函数体里,定义另外一个函数。
类型名 其实就是函数的返回值类型,也就是函数的类型。

2:函数的声明:
函数的声明就是将函数定义的第一行后边加一个分号,前边加一个extern

extern int max(int a,int b);
extern int max(int ,int );//函数声明的时候形参的名字可以没有

声明时候需要声明函数:
1:被调函数在主调函数的下边的时候需要,在主调函数之前进行声明
2:被调函数和主调函数不在一个源文件中的时候,在调用之前,要声明
声明的方法,有两种:
1:直接声明法,就是将函数定义的第一行放在主调函数之前。
2:将函数的声明放在头文件中,在主调函数所在的.c 先包含头文件。

分文件的原理
大体原理是一个.c 对应一个.h ,在c文件中定义函数,在头文件中声明函数。
注意不能把函数的定义放在 .h 头文件中,因为包含多次的时候会展开多次,导致重复定义。
注意在头文件中,一定记得防止头文件重复包含

#ifndef AAA
#define AAA

#endif

3、函数的调用:
函数名+(实参)

int num;
int x=10,y=20;
num=max(x,30+2)//实参可以是主调函数的变量,也可以是常量,常量表达式

什么叫做形参:
定义函数的时候括号里的变量就是形参。
形参是被调函数的局部变量,在函数调用之前,形参是不占用内存的。
调用的时候开辟空间,赋值,函数调用完毕后,形参就会被释放。

三:变量的存储类别
普通局部变量
在函数里或复合语句中定义的变量被称为普通的局部变量

void fun()
{
     int a=3;
     a++;
     printf("a=%d\n",a);
}
int main()
{
     fun();
     fun();
     fun();
}

此程序执行的结果:
a=4
a=4
a=4

静态局部变量
在定义局部变量的时候前边加static ,这样的变量被称为静态局部变量,
静态局部变量的特点:
第一次调用函数的时候分配空间初始化,函数调用完毕后不会释放,以后调用的时候不会重新分配空间
用的第一次开辟的空间,并且变量的值会保留。

void fun()
{
     static int a=3;
     a++;
     printf("a=%d\n",a);
}
int main()
{
     fun();
     fun();
     fun();
}

运行结果
a=4
a=5
a=6
也就说static 改变了静态局部变量的声明周期,静态的局部变量在程序运行的整个过程都存在。

普通全局变量
在函数外边定义的变量,普通的全局变量,全局变量的声明周期是整个程序的运行过程,它的作用范围
在程序的任何地方都可以使用,在使用之前要进行声明。注意全局变量定义必须放在c文件中,声明放在头文件
中,定义的时候可以赋初值,声明的时候一定不要赋值。
全局变量不初始化,值默认为0

全局变量和局部变量可以重名,因为作用范围不一样,在局部变量所在的范围,全局变量不起作用

int a=5;
int main()
{
     int a=10;
     printf("a=%d\n",a);
}

此程序的运行结果是 a=10

静态全局变量
在定义全局变量的时候在最前边加一个static ,这样定义的变量是静态全局变量。
静态全局变量的特点,作用范围被限定在它所在的.c 中,其他.c 中的函数没法使用,

也就说static 限定了静态全局变量的作用范围

普通全局变量和静态全局变量可以重名,因为作用范围不一样。在静态全局变量的作用范围内,全局变量
不起作用。

内部函数
定义函数的时候在返回值前边加static
这样的函数被称为内部函数
static限定了内部函数的作用范围,这一点和静态全局变量是一样的,内部函数只能在它所定义的.c 中有效。

外部函数
普通函数即外部函数,外部函数作用范围是整个程序工程,只需要在调用之前声明。

四:内存分区

动态申请的内存,在堆中开辟

局部变量在栈中开辟空间
静态全局区
又分为 初始化的静态全局区和未初始化的静态全局区
静态变量、全局变量,存在此区。

文字常量区
存放各种常量 100 、2.3、 ‘a’ 、“hello”
代码区
函数都放在代码区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值