当前位置:首页 » 编程软件 » 编译器会自动为它赋初值

编译器会自动为它赋初值

发布时间: 2024-10-09 11:42:28

⑴ C语言指针变量为什么要赋初值

因为指针不初始赋值的话会随机分配一个内存地址,如果后面的代码直接使用的话会出错,C编译器为了不让这种情况发生所以去检测有没有不初始化的指针,其实就是编译器搞得鬼。

⑵ C语言中变量初始化与赋初值有什么不同

所谓初始化,就是指系统(程序)起始状态时,各种参数(变量)应该取什么样的值,因为系统在reset时,漏瞎内存数据可能不定,所以需要在程序开始时进行初始化(变量赋值,控制寄存器赋值配置等)。
赋初值一般指定义一个变量的同时就赋值。
其实,“变量初始化”和“赋初值”只是2种说法,目的都差不多,不必太“纠结”这两个词。
下面是一个mainLoop的结构,当然也可以不用Loop,具体根据你的程序用处决定

/*一般需要初始化的变量都是全局变量 定义变量var2 */
uint16 var2; /*此处var2,仅仅分配了内存空间2字节,但是没有赋初值,所以var2的具体值是多少不清楚,但是根据编译器的不同有些编译器会自动赋初值0或其他*/

void sysinit(void){
.......

var2 = 0; /* 根据要求对变量var2初始化*/
.......
}

main(){
uint16 var1=0; /*此处var1赋初值*/

sysinit(); /*此处可以对var2变量初始化赋值*/
for(;;){
task1();
.....
taskx();
}
}

刚刚看了“幻の上帝”的回答,似乎也没能说清“初始化”和“赋初值”的区别,只是用“微妙”形容了一下。
关于指出的2点错误,再此首先表示戚皮感谢,下面是我的答复:
1.指出“局部auto变量”在我上述论述中,首先并没有提到。再者,“局部auto变量”本身的特性就是在函数调用时才临时分配(一般分配在堆栈中),函数退出时释放。所以,局部auto变量要在函数调用时才能被初始化,这个说法有点“说了也白说”的感觉。而且我也并没有提到适用于“局部auto变量”。既然说到这里了,顺便提一下慎用“static局部变量”,首先就是长期占用(函返仔空数退出时也占用,不释放);其次,降低程序的可读性(多次调用这个函数时,如果开始不对其赋初始值[有点废话的感觉],那么就往往弄不清static局部变量的值)。
2.既然我也提到了和编译器有关,我也没有说一定是0或不是0,只是要根据编译器,目的是为了解释为什么要进行“初始化”的初衷,如果为了讨论各种编译器的标准的话,那我再此先谢谢你提供的消息,但是我觉得没有必要去纠结这些标准,我们只要养成良好的编程习惯,记得定义完变量后,进行“赋初值”或“初始化”,就OK了,这样就不会去争论编译器自动赋什么初值。再者C编译器也好C的标准也好,都也在不断的更新。所以我认为我上面的说法也并没有什么错误。

热点内容
算法结合硬件 发布:2024-10-09 14:11:37 浏览:995
安卓驱动编译进内核 发布:2024-10-09 13:59:30 浏览:600
ubuntunginx编译 发布:2024-10-09 13:27:36 浏览:724
怎么查服务器ip段 发布:2024-10-09 13:08:04 浏览:151
ftpaws 发布:2024-10-09 12:53:20 浏览:272
生化危机5ftp 发布:2024-10-09 12:45:22 浏览:228
系统的安全配置有哪些 发布:2024-10-09 12:31:41 浏览:570
安卓马桶盖怎么拆 发布:2024-10-09 12:19:00 浏览:221
移动硬盘文件夹消失 发布:2024-10-09 12:18:20 浏览:549
编译器会自动为它赋初值 发布:2024-10-09 11:42:28 浏览:350