c语言里变量的"初始化"和"赋初值"一样吗?

如题所述

  语法上的初始化是指对象定义时,对应的分配空间之后对于值的操作。C语言中,静态和全局变量默认置0,有初始化列表的复制初始化列表的值到空间(如有不足,剩余部分置0),局部自动变量可以不初始化(调试器参与时可能被隐式地初始化为其它的值("debug magic number"),例如默认情况下Microsoft C/C++ Debugger会把栈中未初始化的字节置为0xCC)。
  赋初值一般而言是指逻辑意义上的初始化。在C语言中,由于初始化的语法是“=”后加初值,所以“赋初值”基本上就是指语法上的初始化。不过随着语言的发展,“赋初值”的意义发生了扩大。对有构造语义但又允许不初始化而不产生编译错误的程序设计语言而言,两者有些微妙的差别。例如C++的构造函数中,用若干个成员名和括号括起来的初始化值构成的初始化列表是语法上的初始化(也可能是逻辑意义上的初始化,如果没有被构造函数体内的值覆盖),而构造函数体中对成员的赋值语句是逻辑上的初始化但不是语法上的初始化。
  冰的悸动 错误:
  1.“程序开始时进行初始化”的说法仅仅适用于静态或全局变量,而不适于局部自动变量。局部自动变量在函数调用时才能被初始化。
  2.“但是根据编译器的不同有些编译器会自动赋初值0或其他”——这在ISO/IEC C语言标准中不是由实现定义的行为,如果一个编译器符合标准,那么行为就是明确的,即视此初始化的对象是否为全局对象来判断隐式初始化置0还是不进行初始化——从下面的函数定义来看这里应该var2是全局变量,会被置0。非标准编译器则另当别论(但是我还没见过会在这点上没事找茬的)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-19
不尽相同。
初始化,只发生在 定义后的 第一次赋值 或加载。
赋初值,可以理解为,针对本次使用 所 给的第一个值,支持 多次 使用(即需要多次 赋初值)。
其实这都是 人描述的,不咬文嚼字,它们都是一样的。本回答被网友采纳
第2个回答  推荐于2018-02-27
不一样的,一般变量看不出什么区别,对于静态变量就很明显了,如:
int func()
{
static int a = 10; //初始化
static int b;
b = 10; //赋值
a++;
b++;
printf("%d\n", a); //第一次调用函数func,a 的值为 11,第二次调用时为 12,……
printf("%d\n", b); //第一次调用函数func,b 的值为 11,第二次调用时为 11,……
}
从上例可以看出,静态变量只初始化一次,所以 a 的值会随调用的次数递增;而 b 由于重新赋值,所以他的值始终是 11。追问

棒!

本回答被提问者采纳
第3个回答  2015-04-19
其含义一样。

c语言里变量的"初始化"和"赋初值"一样吗?
在C语言中,由于初始化的语法是“=”后加初值,所以“赋初值”基本上就是指语法上的初始化。不过随着语言的发展,“赋初值”的意义发生了扩大。对有构造语义但又允许不初始化而不产生编译错误的程序设计语言而言,两者有些微妙的差别。例如C++的构造函数中,用若干个成员名和括号括起来的初始化值构成的...

c语言为什么整型变量未赋值是随机值,而二维数组未赋值是0
1.在C语言中,“初始化”和“赋值”是两个不同的概念。楼主问题中应该是“初始化”而非“赋值”。int a = 0; 在声明一个变量的时候指定变量的值,这叫做初始化;int a; a = 2; 这叫做赋值。2.auto变量处于运行时堆栈。它的特点:在调用一个函数的过程中,这个函数内部的auto变量才存在,当...

C语言中初始化数组和给数组元素赋值有什么区别?
所谓赋初值一般而言就是初始化啊 从根本上说,其实初始化也并不是编译阶段完成,对于全局变量(数组)而言,一种是exe文件中设定该程序的数据区中的为这个数组存放空间中的值已经是初值了,当然这个值倒是编译程序生成目标程序时设定的,程序运行加载时,给定空间中的内容直接拷贝到空间了,这个不占运行时...

c语言中定义指针变量时,赋值和赋初值有什么区别?
二者的效果是类似的,都是把变量值改变。但在C语言中,编译出的代码有所区别。其中赋初值的效率会更高。

初始化跟赋值有什么区别?初始化不就是第一次赋值?没有什么执行上的特殊...
不必要的初始化会造成磁盘空间的浪费。在C语言等高级语言中,为每一个变量赋初值被视为良好的编程习惯,有助于减少出现Bugs的可能性。但大多数情况下,初始化很有必要,如int i;int a[i]未初始化而使用了a[i]就会出现越界,使用a[0]都可能是乱码 最重要的是指针int *p;char *q;最好写成int ...

C语言定义变量的同时赋予数值和先定义后赋值有什么区别
定义变量只是给那个变量开辟了一个内存空间,里面的值是随机的。赋值之后便在那块内存中写入一个相应的数据。这样你就理解了。

C++语言中,赋值,定义,声名,初始化,四者之间的区别是什么?请详细说明一...
定义,在C++中一般只对变量使用。一般是说明变量的类型。如int i定义i为一个整型变量。初始化,实际上对变量赋初值就是对变量进行初始化。如int i=2将i赋初值2.赋值,初始化其实是赋值的一种情况,另一种情况是比如上面的i我用过了,并且现在i=5。我要让它为9,就写i=9。

大哥我是昨天问的c语言问题,问一下,给变量赋初值为什么啊?能全赋0吗
给变量赋初值就是给变量初始化,因为定义一个变量就是在内存中分配一块内存空间,但是这个内存空间内往往有一个未知的值,这个未知的值是计算机运行过程中留下的,所以需要对变量进行初始化以便抹掉这个内存位置未知的值。变量初始化可以都初始化为0,也可以根据编程的需要进行赋初值,比如有一个for循环,...

初始化是什么意思?
初始化就是把变量赋为默认值,把控件设为默认状态,把没准备的准备好。 但是如果是整个系统初始化那就不一样了。在汇编语言中,为变量分配空间时,初始化过的变量的初值位于可执行文件代码段数据后,会占用一定空间,不必要的初始化会造成磁盘空间的浪费。在C语言等高级语言中,为每一个变量赋初值被视...

小白提问,C语言为什么变量初始化在for里面和外面结果不一样?
您好。很高兴回答您的问题。c语言学到第7章,一般就会讲到变量的作用域的问题。您这里面把i和isprime放在for循环里面定义且赋初始值,那么这个循环每运行一次就会使变量的初始值恢复到定义时的值。若两个变量在循环外定义且赋值的话,那么就只有第一次变量的值为最初的值,后面每次运行这个变量时,它...

相似回答