永发信息网

关于c语言中static在主函数中

答案:3  悬赏:40  手机版
解决时间 2021-02-12 06:44
  • 提问者网友:城市野鹿
  • 2021-02-11 12:28
#include
void fun1(int a[][3],int an,int b[]){
int i,j;
for(i=0;i for(j=0;j if(i=0||i=2||j=0||j=2){
b[0]=b[0]+a[i][j];
b[1]=b[1]*a[i][j];}}
main(){
static int a[3][3]={1,1,1,2,2,2,3,3,3},b[2]={0,1};
fun1(a,3,b);
printf("b[%d]=%d b[%]d=%d\n",0,1,b[0],b[1]);}
不是形参不影响实参吗?应该输b[0]=0 b[1]=1呀?
难道主函数用static b后在调用函数中b也能用?
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-02-11 12:38
跟static没关系。这个当中是数组名做函数参数,传递的不是数组元素的值而是数组的起始地址。所以形参数组b和实参数组b是同一个数组了。
全部回答
  • 1楼网友:深街酒徒
  • 2021-02-11 14:39
static表示整个函数只属于本文件,只能被本文件的函数调用,具有文件作用域,所以,肯定不能在局部作用域里面使用。(因为一个函数中声明的东西怎么能管自己外面的事呢,这肯定是越界行事了嘛)但如果把static去掉,就是一个普通的函数了,这样,你可以在另外的函数内部声明它。
  • 2楼网友:罪歌
  • 2021-02-11 13:29
数组作参数时退化为指针,也就是实际上被调用函数只得到了数组的首地址,这样的话它可以直接改变原数组的,要想让它不改变的话函数可以这么定义 void fun1(int a[][0], int an, const int b[]) b在main中不一定要是const类型的,这样定义只是使b对函数fun1是const的,这样的话当你试图在函数fun1中改变数组b时编译器会报错。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯