昨天晚上,舍友发来一个程序,先把代码贴上:

 #include<stdio.h>
#define N 20
short bufferA[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
short bufferB[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int dotp(short a[N],short b[N])
{
  int y;
 int i;
 for(i=0;i<N;i++)
   y+=a[i]*b[i];
 return y;
}
int main()
{
  int y;
  y=dotp(bufferA,bufferB);
  printf("%d\n",y);
  return 0;
}
 
整个代码很简单,无非是调用dotp()函数,dotp()函数实现求两个数组各成员乘积的和,
但是始终没有调试出来,答案始终是一个负的很大的数。
修改了半天,然后又查了一些资料,终于找出原因。
 
修改:把dotp()里的 int y ;改为  static int y; 
下面贴出一些static的用法,本题应该参考问题2.
 

1. static全局变量与普通的全局变量有什么区别 ?

  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

  全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

  这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

  static全局变量只初使化一次,防止在其他文件单元中被引用;  

2.  static局部变量和普通局部变量有什么区别 ?

  把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

  static局部变量只被初始化一次,下一次依据上一次结果值;  

3.  static函数与普通函数有什么区别?

   static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.

  static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

“static”引发的一个错误的更多相关文章

  1. CoUninitialize引发的一个错误

    程序开始已使用CoUninitialize,后边的函数又再次调用CoUninitialize,判断返回值,导致函数提前退出返回异常.

  2. JMeter一个错误the target server failed to respond--JMeter坑

    问题:1.在测试一个http景象,特别是集波动TPS时刻,出现了一个错误.它现在是一个必须错误(压力顺利时却零星的错误,甚至很少见): 每次必现错误(開始一直怀疑是网络或程序的问题)   2.失败事务 ...

  3. lintcode-74-第一个错误的代码版本

    74-第一个错误的代码版本 代码库的版本号是从 1 到 n 的整数.某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错.请找出第一个错误的版本号. 你可以通过 isBad ...

  4. Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作

    Oracle 远程访问配置   服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 ...

  5. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

  6. 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    新服务器安装完开发环境后,还需要注册framework4.0到IIS.不然会报错:   HTTP 错误 500.21 - Internal Server Error 处理程序“Extensionles ...

  7. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

  8. HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipe ...

  9. 【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"的解决办法

    新装IIS,然后发布网站,运行出现如下错误提示 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 于是 ...

随机推荐

  1. c语言第12次作业

    #include<stdio.h> struct student { ]; ]; ]; double grade; }; void main() { ]; ;i<;i++) { pr ...

  2. 使用IIS发布WCF服务

    上一篇是Windows服务为宿主的WCF服务,现在用IIS为宿主发布WCF服务. 第一步:肯定是新建一个WCF服务啦[是WCF服务应用程序],然后在解决方案上再次添加一个新项目[我们选择WCF服务库, ...

  3. asp.net 一般处理程序

    一般处理程序类似公共模块,所有页面都可以调用. 一般处理程序 <%@ WebHandler Language="C#" Class="SetGrid" % ...

  4. python求解ax² + bx + c = 0

    系数需满足条件: a,b不能同时为0 b2-4ac≠0 代码如下def quadratic(a, b, c): """ 返回ax² + bx + c = 0的 " ...

  5. 【转】【RDS教程】专业DBA速成 - CPU优化篇

    来源:http://bbs.aliyun.com/read/160831.html?spm=5176.7189909.0.0.0thneM&displayMode=1&page=1&a ...

  6. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  7. WCF 、Web API 、 WCF REST 和 Web Service 的区别

    WCF .Web API . WCF REST 和 Web Service 的区别 The .Net framework has a number of technologies that allow ...

  8. lua定义一个简单的类

    classA.lua: classA = { a = , b = , --__index = classA; }; classA.__index = classA; function classA:n ...

  9. 让我轻轻的告诉你AliSQLselect语句中in多少个合适

    在以往的分享中,不止一次被开发问: 在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using ...

  10. java 线程 障碍器

    package de.bvb; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; /** ...