C语言--疑问解析

别来无恙 提交于 2020-03-07 14:28:16

1.局部变量未初始化值不确定,全局变量初始值为0;(vs2017局部变量不初始化报错)

2.大小端模式问题:

大端模式:高位数据存储在低地址内存单元,数据的低位数保存在高地址内存单元中。即地址由低到高,而数据字节位数由高到低。

小端模式:数据的低位字节保存在高地址内存单元,数据的高字节保存在低地址内存单元中。即地址由低到高,数据字节位数由高到低。

假设变量x的类型为int,位于地址Ox:100,其值为Ox01234567,其地址范围为Ox100~Ox103,其内部数据排列顺序由机器类型决定。

大端模式:Ox100 01, Ox101 23,Ox102 45,Ox103 67

小端模式:Ox100 67, Ox101 45, Ox102 23, Ox103 01

3.# include <string.h>
void *memset(void *s, int c, unsigned long n);

函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。

4.静态全局变量和全局变量,局部变量和静态局部变量的区别:

静态全局变量,全局变量,静态局部便量都在静态区,而局部变量在栈区。未初始化的静态变量,全局变量都在BSS段。

全局变量和局部变量的区别是:生存周期不同,而静态全局变量和全局变量的作用域不同。

全局变量在本文件中可用,通过添加extern在本工程的其他源文件可以通用。

而静态全局变量只可在本源文件内可用。

5.内存泄漏:动态内存一经开辟,当程序使用完毕后,未能及时释放,造成内存泄漏。当生活中Android手机用着就会出现卡顿现象,这就是内存泄漏。当手机重启后,速度又提升许多,释放了内存。

6.断言,就是通过设置,判断假设是否为真,进而判断程序的正确性。如果违反假设,就中断程序。

7.栈和队列:栈和队列是数据结构中的存储结构。栈的存储规则为先进后出,队列的存储规则为先进先出。都是线性结构,存在一对一的线性关系。栈和队列都可以写成顺序表的形式和链的形式。

8.线性结构和非线性结构:线性结构数据元素之间存在一对一的线性关系,线性结构拥有两种结构,顺序表和链表。非线性结构数据元素之间不局限与一种线性结构,还与其他元素可能发生联系,如二维数组,多维数组,树等结构。

9.段页式的异同:

页式和段式管理策略都不会产生外部碎片,但都有可能产生内部碎片

页的大小是统一的,而段的大小是可变的 采用分页会导致用户视角的内存和实际内存的分离,即使用户视角的内存和实际物理内存不一样,而分段正好可以支持用户视角,使用户视角的内存和实际物理内存分布保持一致

分页对程序员来说是透明的,用户指定一个地址,该地址通过硬件分为页码和偏移,这些程序员是看不见的;而分段对程序员来说通常是可见的,用户通过两个量:段号和偏移来指定地址,这两个量作为组织程序和数据的一种方便手段提供给程序员,程序员可以通过这两个量把程序和数据指定到不同的段(程序员必须清楚段的最大长度)
 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!