精华内容
下载资源
问答
  • C语言变量赋值问题总结

    千次阅读 多人点赞 2015-12-22 19:03:10
    全局,静态变量,一般默认为0;  局部变量在栈上,取决于此处原来的数据,如果不初始化的话;  动态变量在堆上. 正是如此 一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定...


    正是如此
    一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定的值)
    而局部变量处于堆栈区,其数值是随机的,即当时内存中的值。

    总体来说
    不要利用编译器的这种默认原则
    而是应当显示的指定
    必要的初始化不是笨拙
    而是规范
    展开全文
  • c语言变量赋值,初始化

    千次阅读 2016-10-22 15:57:45
    1 全局变量, 和静态局部变量,未初始化时值默认为0.无论是数组还是变量,都是如此。 2 局部变量,初始值为随机值。 3 数组类局部变量,当被部分初始化时,未被初始化部分,值默认为0。 1.在C语言中,“初始化”和...
    数组变量为全局变量,或被部分初始化,均会出现这种情况。
    
    C语言中,变量在没有显式初始化时,区分变量类型,有如下几种情况:
    1 全局变量, 和静态局部变量,未初始化时值默认为0.无论是数组还是变量,都是如此。
    2 局部变量,初始值为随机值。
    

    3 数组类局部变量,当被部分初始化时,未被初始化部分,值默认为0。

    1.在C语言中,“初始化”和“赋值”是两个不同的概念。楼主问题中应该是“初始化”而非“赋值”
    int a = 0; 在声明一个变量的时候指定变量的值,这叫做初始化;
    int a; a = 2; 这叫做赋值。
    2.auto变量处于运行时堆栈。它的特点:在调用一个函数的过程中,这个函数内部的auto变量才存在,当这个函数调用结束时,这些变量所占用的内存即被收回。如果多次调用一个函数,这个函数内部的auto变量在内存中的地址是不确定的。由于auto变量在内存中的地址不是一成不变的,所以在程序开始前,编译器无法确定它们的值,并不对它们进行初始化。
    因此,auto变量未被初始化时,编译器也不知道你想要往这个变量里存什么,所以它的值是不确定的,毫无意义的,等着你在运行时给它进行赋值操作。
    3.如果不对一个数组(非全局的、非静态的)进行初始化,这个和上面的变量未初始化一样,编译器不知道你要做什么,所以懒得浪费时间对它们进行初始化。
    如果对一个数组进行部分初始化,形如:
    int a[10] = {1, 2, 3};
    未被初始化的部分a[3]~a[9]便会被编译器初始化为0。我的理解是,这是编译器认为你只关心数组a中前三个数的值,而后面的编译器为了让你省心就帮你初始化为0了,这时候编译器想“反正你都让我把前三个给填上了数,我也不怕麻烦了,后几个我给你填0吧”,于是编译器很大方地挥一挥衣袖把a[3]~a[9]填为0。
    但是:
    int a[10];
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
    这个时候a[3]~a[9]的值并不是0.因为这是运行时赋值,这个时候编译器已经下班了,所a[3]~a[9]中的值也是不确定的。 
    4.最后,再说一下全局变量和一个函数内部的静态局部变量,它们并不是存储在运行时堆栈,在程序运行过程中,它们的在内存中地址是确定的,所以编译器就把它们初始化为0。

    展开全文
  • 程序目的:弄清C语言中的变量未赋值时的初始值问题 测试结果:在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char,空指针 分别为0.0.0.'\0',0~~~~~~~除了全局变量和静态变量以外,其它变量如果...

    /*
    程序目的:弄清C语言中的变量未赋值时的初始值问题

    测试结果:在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char,空指针
    分别为0.0.0.'\0',0~~~~~~~除了全局变量和静态变量以外,其它变量如果没有赋初值,则默认初始值为
    内存中的垃圾内容,对于垃圾内容不能有任何假设.
    这些规则对于数组\结构体和联合体也同样适用
    用malloc()和realloc()动态分配的内存也可能存在垃圾内容.因此在使用变量前最好都赋初值.
    */

    #include<stdio.h>
    #define N 10
    int a,b[N];
    char c,*m;
    void main()
    {
     static int p,q[N],i;
     char e,*n;
     printf("%d,%d\n%d,%d\n%d\n",a,c,p,e,n);
     for(i=0;i<N;i++)
     {
      printf("%d ",q[i]);
     }
     getchar();
    }

    转载于:https://www.cnblogs.com/calm/archive/2008/04/13/1151840.html

    展开全文
  • 近期编写的程序中,有一些变量:如数据的输入路径、输出路径、某些数据的范围区间等,在main程序的最开始被赋值,之后很多其他源文件中也会用到。 通常我的思路是,把所需的变量作为函数的参数传递。最近经常遇到...

    参考:

    static_百度百科(里面的程序代码只可参考思路,有错误)

    c/c++中static关键字详解

    c语言:全局变量在多个c文件中的公用方法

    近期编写的程序中,有一些变量:如数据的输入路径、输出路径、某些数据的范围区间等,在main程序的最开始被赋值,之后很多其他源文件中也会用到。

    通常我的思路是,把所需的变量作为函数的参数传递。最近经常遇到这样的问题:函数A需要调用函数B,函数B调用函数C,C需要用到一些配置参数,而这些参数AB都不会用到,但是由于AB调用C,因此函数AB的形参都要包含这些参数,使得函数AB的参数看起来非常多,显得冗余,编程麻烦。因此,便产生了以下问题:

    “是否存在一种变量,它在main中被初始化一次,其后其值不能被更改,并且能被其他所有源文件的函数共享?”

    Google给出的解答是:全局变量和静态全局变量

    全局变量的特点:能被所有源文件所共享,在某个源文件中定义,在其他源文件中通过extern 来访问,但是只满足被所有源文件共享,不满足“只被初始化一次,其后其值不能被更改”,所有共享文件中的函数都能改变它的值(危险)。 

    静态全局变量的特点是 :只被所在的源文件中的函数共享,其他的源文件即使通过extern也无法访问。

    因此,要解决上述问题,我们可以这麽做:

    在初始使用这些参数的源文件中定义这些参数变量,如果其他源文件中的函数需要使用这些参数,那么就在源文件中通过extern的方式来声明,并通过将该参数声明为函数的const形参的形式来使用,这样就保证该变量不会被函数修改。

    接下来,又产生了新的问题:

    我在头文件中定义所需的全局变量,在需要这些变量的源文件中包含这个头文件,不也可以吗?

    如果这么做,编译是无法通过的,会产生error LNK2005

    error LNK2005: "int enzyme_type" (?enzyme_type@@3HA) 已经在 file_operation.obj 中定义

    意思就是编译器认为你重定义了。为什么会这样呢?这就要理解编译器的工作原理,可参考c语言:全局变量在多个c文件中的公用方法.c文件和.h文件的关系

    在编译过程中,编译器实际上是把头文件中的内容原封不动的复制到了包含它的源文件中,因此就相当于重定义。

    正确的做法只能是在某个源文件中定义全局变量,并在其他的源文件中通过extern声明它。

     

    转载于:https://www.cnblogs.com/zhenghao2/p/6597903.html

    展开全文
  • o 4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated_expression; * 5. 指针 o 5.1 我想声明一个指针并为它分配一些空间, 但却...
  • C语言学习中遇到的问题与解决方法

    千次阅读 2018-01-24 23:53:20
    1.static作用 static修饰变量指该变量空间独立于函数中的auto变量或栈变量,static变量空间在内存中的静态区内分配。...对于静态局部变量,若没有进行初始化,整型变量系统会自动对其赋值为0,对于
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef和#...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef 和#define有...
  • 《你必须知道的495个C语言问题

    热门讨论 2010-03-20 16:41:18
    1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,...
  • 赋值和初始化4.2. 访问每个成员4.3. 结构体变量的运算4.4. 结构体作为函数传递问题5. 结构体内存对齐问题(面试常考)5.1. 问题描述5.2. 问题原因5.3. 问题分析6. 结构体数组6.1. 静态数组6.2. 动态数组三、枚举体1...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗?  1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef)  1.13 对于用户定义类型,typedef和#...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,...
  •  存储类型 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,...
  •  1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗?  1.11 extern在函数声明中是什么意思?  1.12 关键字auto到底有什么用途?  类型定义(typedef)  1.13 对于用户定义类型,...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef 和#define有...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...
  • C语言中的小知识

    2018-03-21 14:28:16
    当做备忘录来用喽0、小常识大学问a、在C语言中,用scanf输入double类型数据,转义字符只能用%lfb、赋初值问题(最好赋初值,不然很多时候不知道自己是怎么死的) 1)对于全局变量和局部静态变量,如果没有初始化值...
  • 例如: z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。'Next of Page 2.函数语句  函数调用的一般形式加上分号即构成函数语句。例如: printf ("%D",a);scanf ("%d",&b);都是以函数语句的方式调用函数。 3....
  • 谭浩强c语言程序设计

    2011-03-18 09:58:19
    10.2.4 指针变量几个问题的进一步说明 140 8 10.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和...
  • 谭浩强c语言word版

    2011-04-25 10:40:43
    10.2.4 指针变量几个问题的进一步说明 140 8 10.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 35 1.11 extern在函数声明中是什么意思? 35 1.12 关键字auto到底有什么用途? 36 类型定义(typedef) 36 1.13 对于用户定义类型,...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 35 1.11 extern在函数声明中是什么意思? 35 1.12 关键字auto到底有什么用途? 36 类型定义(typedef) 36 1.13 对于用户定义类型,...
  • C语言编程要点

    2017-09-18 00:10:37
    2.11. 对不同类型的变量进行算术运算会有问题吗? 25 2.12. 什么是运算符升级(operatorpromotion)? 25 2.13. 什么时候应该使用类型强制转换(typecast)? 26 2.14. 什么时候不应该使用类型强制转换(typecast)? 27 2.15....
  • 10.2.4 指针变量几个问题的进一步说明 140 8 10.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 243
精华内容 97
关键字:

c语言静态变量赋值问题

c语言 订阅