static 静态全局变量 按照实型关键字成员有序的结构体数组的对分查找

在实现一个按照实型关键字成员有序的结构体数组的对分查找算法时,遇到在VS中调试时的错误,包括结构体类型的重定义和函数已存在主体的错误。问题根源在于使用了`static`静态全局变量。`static`静态全局变量的好处是只能在定义它的文件中访问,避免了名字冲突,但可能导致函数重复定义的编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在查看“按照实型关键字成员有序的结构体数组的对分查找”的算法时候,在VS上调试一下,发现很多错误。

  int rbkey(p,n,a,b,m)
  int n,*m;
  BISERCH *p[];
  double  a,b;
  { int i,j,k;
    i=1; j=n;
    while (i<=j)
      { k=(i+j)/2;
        if (((*p[k-1]).KEY>=a)&&((*p[k-1]).KEY<=b))
          { i=k-1; j=0;
            while ((i>=0)&&((*p[i]).KEY>=a)) 
                { i=i-1; j=j+1;}
            i=i+1;
            while ((k<=n-1)&&((*p[k]).KEY<=b)) 
                { k=k+1; j=j+1;}
            *m=j; return(i);
          }
        if ((*p[k-1]).KEY>b) j=k-1;
        else i=k+1;
      }
    while ((i>=0)&&(b<(*p[i]).KEY)) i=i-1;
    i=i+1; *m=0;
    return(i);
  }


利用主函数调用结构体排序函数rkey(),和上述的rbkey()。rkey()是结构体排序函数。但是在运行过程中出现错误:

1>f:\algorithm\16\16rbkey\16rbkey\16rbkey.c(7): error C2011: “student”:“struct”类型重定义
1>          f:\algorithm\16\16rbkey\16rbkey\16rbkey.c(7) : 参见“student”的声明
1>f:\algorithm\16\16rbkey\16rbkey\16rbkey.c(15): error C2084: 函数“int rbkey()”已有主体
1>          f:\algorithm\16\16rbkey\16rbkey\16rbkey.c(14) : 参见“rbkey”的前一个定义

原来是static的问题。

一个完整的程序在内存中分布是:

代码区

全局数据区

堆区

栈区

静态全局变量不能被其它函数调用,即使其它函数使用相同名字也不会冲突,这是它的好处。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值