从空间分配上看,数组是静态分配,空间是连续的,而指针是动态分配,空间不一定连续,只从指针分配空间的原理可以看出;从访问效率上看,数组是直接访问,所以效率较高,而指针是间接访问,效率自然是没有数组高;从安全性上看,数组易导致访问越界的问题,而指针容易导致内存泄漏;作为函数形参时,数组都会默认转化为相对应的指针,比如一维数组名代表一维数组首元素的地址。
C语言中函数可以提高代码的复用性,维护性,扩展性。
函数的调用过程:
1.通过函数名找到函数的入口地址
2.给形参分配内存空间
3.传值:把实参变量对应空间的值传给形参
4.执行函数体语句
5.函数返回并释放内存空间(全局变量在程序结束后释放内存空间,这里是局部变量释放内存空间)
写函数时不要忘记入口参数检查
有时我们会见到main函数中有参数:
<pre name="code" class="cpp">int main(int argc ,char *argv[])
{
printf("%d\n",argc);
int i;
for(i = 0; i < argc; i++)
{
printf("%s\n",agrv[i]);
}
return 0;
}
其中argc代表的参数个数,argv[]里面存放这参数的内容,主函数参数就是命令行参数。
函数指针:
#include <stdio.h>
int add(int a,int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int cal(int *p_func,int a,int b)
{
p_func(a,b);
}
int main()
{
int num1 = 5;
int num2 = 4;
int (*p_func)(int,int);
p_func = add;//add是函数入口地址,也可以p_func = &add,更偏向于前者
cal(p_func,num1,num2);
/*p_func可以换成add,add函数是一个回调函数,体现了C语言的多态,想增加其他函数功能是,只需要重新实现其函数功能,把p_func 换成其函数名即可。
return 0;
}