在上一节的学习中,在例5中有个错误,不知道你们发现了没有:
![bbcb128dda8495d91da69e794fa92770.png](https://i-blog.csdnimg.cn/blog_migrate/0c1583dac1a74fd3025348ca7d55a7f2.jpeg)
在第七行中不能用三目运算符来进行运算,现只能用if语句来进行改写:
if(array[i][j]>max)
max=array[i][j];
例1 若外部变量与局部变量同名,分析结果
#include<stdio.h>
int a=3,b=5; //定义全局变量
int main()
{
int max(int a,int b);
int a=8; //定义局部变量
printf("max=%dn",max(a,b));
return 0;
}
int max(int a,int b)
{ int c;
c=a>b?a:b;
return c;
}
答:由于全局变量和局部变量中都含有a,故两者发生冲突,局部变量从而将全局变量所覆盖,故max(a,b)=5,而不是8
例2 考察静态局部变量的值
#include<stdio.h>
int main()
{int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%dn",f(a));
return 0;
}
int f(int a)
{auto int b=0;
static int c=3; //注意此处的static
b+=1;
c+=1;
return(a+b-c);
}
解析:这程序输出的结果为-1;-2;-3
但如果将static给删去,即变成int c=3,结果就变成了-1;-1;-1
两者出现不同的原因:static保证了在函数调用后c并未恢复初始值3,而是仍保留4,而将static删去后,int就变成了自动局部变量,就无法保证这一点了。
例3 写一个函数,使给定的一个3✖️3的二维数组转制,即行列互换
#include <stdio.h>
#define N 3 //使N=3(全局变量)
int array[][3]; //定义全局变量array[][3]
int main()
{void convert(int array[][3]); //函数声明
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&array:n");
printf("array :n"):
for(i=0;i<3;i++)
{for(j=o;j<3;j++)
printf("%d",array[i][j]);
printf("n");
}
return 0;
}
void convert(int array[][3]) //定义函数
{int i,j,t;
for(i=0;i<N;j++)
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}