符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
//考点是数组作为参数入参,第一个参数为数组指针,第二个参数为数组长度,第三个参数为被成书
成都做网站、成都网站设计,成都做网站公司-创新互联建站已向上1000+企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
void func(int a[], int size, int x){
for(int i = 0; i size; i++){
a[i] *= x;
printf("%d ", a[i]);
}
printf("\n");
}
int main(){
int a[4], x;
scanf("%d,%d,%d,%d", a[0], a[1], a[2], a[3]);
scanf("%d", x);
func(a, 4, x);
return 0;
}
一、数组可定义为全局变量,函数直接调用。
二、数组可定义为局部变量,再通过参数传递到函数中调用(实参传数组名,表示数组首地址,也可通过指针或数组名+数字来传递数组局部地址)。
三、main函数想要调用函数返回的数组,可用static定义静态变量或malloc定义动态数组(字符串常量也可返回使用,但局部变量,在函数调用结束会被释放,不能作为返回地址使用)。
下面是演示代码:
#include stdio.h
#include string.h
#include malloc.h
char str1[]="我是全局变量数组";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函数的局部数组变量";
str3=fun0(str2);
printf("str3:%s,fun函数调用结束,我的地址依然可以使用\n",str3);
str4=fun1();
printf("str4:%s,fun函数调用结束,我的地址依然可以使用\n",str4);
str5=fun2();
printf("str5:%s,fun函数调用结束,函数结束不会自动释放\n",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函数申明的静态数组变量";
printf("str1:%s,fun函数可以直接调用\n",str1);
printf("str2:%s,fun函数通过参数将我的地址传进来\n",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函数的字符串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="这是一个临时数组,之后用于给mallc申请的地址传值,传递内容为:(我是fun函数通过mallic申请的数组)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
方法
有2
将该数组定义为全局变量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.将该数组作为函数参数传递到自定义函数里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
给你看一下我的代码
#includestdio.h
void main(){
int a[10],b[10],i,j,temp;
for(i=0;i10;i++){
printf("请输入第%d个数:",(i+1));
scanf("%d",a[i]);
//保存数组,因为输入完数组要冒泡排序,排序后的元素顺序可能和原数组不一样
b[i]=a[i];
}
//冒泡排序,求最大值
for(i=0;i9;i++){
for(j=0;j9-i;j++){
if(a[j]a[j+1]){ //这里控制的升序还是降序,我这是降序
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//查找最大值在原数组的位置
for(i=0;i10;i++){
if(b[i]==a[0]){ //降序的话最大值是a[0],升序的话最大值是a[9]
break; //一旦找到最大值,马上跳出循环
}
}
printf("最大值是%d,它在原数组中是第%d个元素!\n",a[0],(i+1));
}
你的程序:
main()
{
int b[3];
b=pop();
}
int * pop()
{
int a[3],i;//定义的局部变量a[3]在调用完之后自动释放其空间
for(i=0;i3;i++)
a[i]=i;
return a;//返回的是指向数组a[3]的地址而不是数组a[3]本身
}
注:既然上面说到调用的方法返回的是指向数组a[3]的地址,所以主函数中b接收的应该是指向数组a[3]的地址,而数组a[3]在方法调用完后又被释放了,所以b接收不到数组a[3],故出错。
正确的程序:
#includestdio.h
main()
{
int b[3];
pop(b,3);
}
void pop(int a[],int n)//该方法传入两个参数,第一个是传入指向数组的地址,第二个参数是传入数组的长度,不需写返回语句return,只需通过指向数组的地址的传入就可以直接将数组b[]的值改变
{
int i;
for(i=0;in;i++)
a[i]=i;
}