数组为什么允许-1作为下标?
C/C++/ObjC数组比较自由,数组下标仅仅代表和数组地址的偏移。偏移-1就是数组地址更小的地址。这种灵活的方式,允许从特定地址获取之前之后的地址。从数学的角度,类似数轴的正数和负数。
编程语言变量覆盖的内部原理是什么?
一些编程语言,支持内部作用域变量覆盖外层同名变量。这种机制,方便了变量命名的困扰,在某些情况下,方便了程序员。编译器支持变量覆盖,一般是利用链表结构保存所有符号(Symbol, 变量信息的结构体),对于有相同名称的符号,有指针变量指向上一级(外部作用域)的符号。当离开作用域后,直接移除对应符号信息,即达到了变量覆盖。
为什么C语言局部变量初始值是随机的?
从汇编角度,局部变量的分配仅仅是堆栈指针SP的变化,从指令角度,这样是最简单省事的。C语言为了高效率,没有增加局部变量默认初始化。
为什么C语言全局或静态变量初始值是0?
首先要理解,这些变量是如何被存储和加载的。全局或静态变量如果有明确初始化值(不为0),会被分配到.data区,对应目标文件或者可执行文件的.data区,它们是存储在文件中的。在操作系统加载程序时,会将它们拷贝到内存对应的区域。对于初始化为0或者没有写初始化的,根据编译器优化的方式,很可能放到BSS段,注意这个段并不会在文件.bss区分配空间,只是指定了总长度。因为,在操作系统加载的时候,会直接将一整块BSS在内存中初始化为全0. 是不是一点不浪费?
若文章对您有帮助,欢迎关注。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。