C语言数组与函数
发布网友
发布时间:2022-04-29 09:13
我来回答
共2个回答
热心网友
时间:2022-06-25 07:34
你的程序:
main()
{
int b[3];
b=pop();
}
int * pop()
{
int a[3],i;//定义的局部变量a[3]在调用完之后自动释放其空间
for(i=0;i<3;i++)
a[i]=i;
return a;//返回的是指向数组a[3]的地址而不是数组a[3]本身
}
注:既然上面说到调用的方法返回的是指向数组a[3]的地址,所以主函数中b接收的应该是指向数组a[3]的地址,而数组a[3]在方法调用完后又被释放了,所以b接收不到数组a[3],故出错。
正确的程序:
#include<stdio.h>
main()
{
int b[3];
pop(b,3);
}
void pop(int a[],int n)//该方法传入两个参数,第一个是传入指向数组的地址,第二个参数是传入数组的长度,不需写返回语句return,只需通过指向数组的地址的传入就可以直接将数组b[]的值改变
{
int i;
for(i=0;i<n;i++)
a[i]=i;
}追问回答错了
热心网友
时间:2022-06-25 07:34
#include<stdio.h>
#include<string.h>
void Solve();
int Process(char ch[]);
int main()
{
Solve();
return 0;
}
void Solve(){
int i,M;
scanf("%d",&M);
char c[51];
static int a[100];
for(i=0;i<M;i++){
scanf("%s",c);
a[i]=Process(c);
}
for(i=0;i<M;i++)
if (a[i]>=3)
printf("Yes\n");
else
printf("No\n");
}
int Process(char ch[]){
int a=0,len,j;
int flag[4];
len = strlen(ch);
if (len>=8 && len<=16) {
for(j=0;j<4;j++)
flag[j]=0;
for(j=0;j<len;j++){
if(ch[j]>='A'&&ch[j]<='Z')
flag[0]=1;
else if(ch[j]>='a'&&ch[j]<='z')
flag[1]=1;
else if(ch[j]>='0'&&ch[j]<='9')
flag[2]=1;
else
flag[3]=1;
}
for(j=0;j<4;j++)
if(flag[j]==1)
a++;
}
return a;
}