如果是非静态的局部变量,那第二次调用时,数组会被 ”清空“。
创新互联成立于2013年,我们提供高端网站建设公司、成都网站制作、成都网站设计、网站定制、网络营销推广、成都小程序开发、微信公众号开发、seo优化排名服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为砂岩浮雕企业提供源源不断的流量和订单咨询。
子函数中,声明的非静态局部变量、数组,使用的是函数栈空间。
在每次调用函数时,都会新分配一块儿栈空间给函数使用。
因此相当于每次调用子函数,子函数内的局部变量都会被初始化~
C语言中,同变量一样;数组也必须先定义后使用。
一维数组的定义形式:
类型标识符 数组名[常量表达式];例如int a[10]; 其中a为地址常量。
如变量的定义一样,int a ;double a;float a等;数组的定义只是把后面的变量名改为数组名而已。
int a[10]就是定义了一个数组名为a的数组;此数组有10个元素。其中各元素从a[0]到a[9];并没有a[10]元素。下面列举一个。
扩展资料
常量表达式可以包括字面常量和符号常量;但不能包含变量。例如对下面定义是错误的
int n=5
int a[n]
可以修改为
#define N 5
int a[N]
其中对二维及多位数组定义可以类推
int a[x][y][z][...]其中 x,y,z为数字。
参考资料
百度百科-C语言
函数不可以定义为数组,可以用函数指针来操作。
1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义。
2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。
扩展资料:
指针函数和函数指针的区别:
这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符*函数名称。
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
参考资料:百度百科 - 函数指针
在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。
#includestdio.h
#includemalloc.h
int ** sr(void)
{
int i,j;
int *memory=(int *)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3
int **arr=(int **)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组)
if(!memory || !arr){
printf("内存申请错误!\n");return NULL;}
for(i=0,j=0;i9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素
arr[j++]=memory[i];
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return arr;
}
int main(void)
{
int i,j,**arr=sr();
if(!arr)
return 1;
printf("---主函数调用子函数定义的二维数组---\n");
for(i=0;i3;i++,printf("\n"))
for(j=0;j3;j++)
printf("%d ",arr[i][j]);
printf("\n---实现二维数组地址连续性---\n");
int *p=arr[0][0];
while(p=arr[2][2])
printf("%d ",*p++);
return 0;
}