| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 西邮Linux兴趣小组2021纳新面试题简析 -> 正文阅读 |
|
[系统运维]西邮Linux兴趣小组2021纳新面试题简析 |
?sizeof()是一个运算符,括号内为一个变量或者一个变量类型,结果为它所占空间的大小(以字节为单位)。 strlen()是一个函数,计算括号内字符串的长度,不包括'\0' 详情见转载: C语言中sizeof()和strlen()的区别_追梦的小蚂蚁-CSDN博客_sizeof和strlen在c语言的区别 相等,均为16. 有内存对其规则可以知道: test1:a(4字节)从地址0开始占用0、1、2、3四个单元,b(2字节)占用4、5单元,c(8字节)内存对齐占用8、9、10、11、12、13、14、15单元,最后内存对齐补齐到16 test2:b同理占用0-1,a占用4-7,c占用8-15单元,补齐16 详情见转载: ? ?
?传值:把A的数值传到B,改变B,A不会跟着变,B存的是跟A一样的值,只是在子函数里做了一个拷贝,把传入的值赋给了子函数的形参。子函数无法修改A的值。 传址:把A的地址作为实参传给子函数的形参B,B的值为A的地址,通过地址访问A,便可以改变A的值。 变量的生命周期:
上面程序的输出结果为: a=5 ? ?
?
?输出结果为: a=0xfffe? b=0xffffffff???? d=0x2022???? e=0xffffffff c=0xf0 这是关于函数运算符的考察: ?转载博客:C语言位运算符基础_kevinchan1207的博客-CSDN博客 ? 关于指针和数组可以看这篇博客:如何看待一维数组以及二维数组的数组名、首元素、数组地址_季末狂甩的博客-CSDN博客_一维数组的数组名
结果为10 4 9. 仅考虑语法的情况下:
? ? swap1和swap2均正确,用宏定义函数进行文本替换。 关于宏替换里用do{...}while(0),可参考以下博文: do{...}while(0)的用法_majianfei1023的专栏-CSDN博客_do while怎么用 swap3错误,只传递了a,b的值,没有传递地址,仅仅在函数内交换了a,b的值,并没有作用到外面,应该传递地址。 关于argc和argv的含义,查阅资料如下:? ?argc和argv参数在用命令行编译程序时有用。main( int argc, char* argv[], char **env ) 中? 遍历方法如下:
? ?func1和func2正确,func3错误。 区别如下: static全局变量与普通的全局变量 static局部变量和普通局部变量 static函数与普通函数 详情见此博文: static--静态变量与普通变量的区别_yang_B621的博客-CSDN博客_静态变量 ?此题有关字节序大小端法,详情如下 ?大概就是这样一个过程: ? 先将源文件翻译为计算机可以识别的机器指令,然后再让及算计执行这些指令。 编译器编译各个源文件为目标文件,然后由链接器链接各个目标文件成为可执行文件; ?详情请见:谈谈C语言从源文件变为可执行文件之间发生的过程详解(C程序的编译链接运行)_呋喃吖的博客-CSDN博客_c文件编译可执行文件 一个由c/C++编译的程序占用的内存分为以下几个部分: 1.1 栈简介 栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。参考如下代码:
? 其中函数中定义的局部变量按照先后定义的顺序依次压入栈中,也就是说相邻变量的地址之间不会存在其它变量。栈的内存地址生长方向与堆相反,由高到底,所以后定义的变量地址低于先定义的变量,比如上面代码中变量 s 的地址小于变量 b 的地址,p2 地址小于 s 的地址。栈中存储的数据的生命周期随着函数的执行完成而结束。 堆由开发人员分配和释放, 若开发人员不释放,程序结束时由 OS 回收,分配方式类似于链表。参考如下代码:
? 其中 p1 所指的 10 字节的内存空间与 p2 所指的 10 字节内存空间都是存在于堆。堆的内存地址生长方向与栈相反,由低到高,但需要注意的是,后申请的内存空间并不一定在先申请的内存空间的后面,即 p2 指向的地址并不一定大于 p1 所指向的内存地址,原因是先申请的内存空间一旦被释放,后申请的内存空间则会利用先前被释放的内存,从而导致先后分配的内存空间在地址上不存在先后关系。堆中存储的数据若未释放,则其生命周期等同于程序的生命周期。 关于堆上内存空间的分配过程,首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确地释放本内存空间。由于找到的堆节点的大小不一定正好等于申请的大小,系统会自动地将多余的那部分重新放入空闲链表。 详情如下: ?关于堆栈的讲解(我见过的最经典的)_yingms的专栏-CSDN博客_堆栈 一文读懂堆与栈的区别_Dablelv的博客专栏-CSDN博客_堆和栈的区别 前提为,另一个文件中的函数,不能是静态函数,即不能有static修饰。 调用方法:在调用前进行声明,然后直接调用即可 声明方法:如调用函数为int func(int a),那么在调用前只需要加上int func(int a);这样声明后,即可使用func。 在同一个项目里面的源文件之间的函数一般情况下是可以互相调用的,前提是要声明以及不限制它的作用域 创建文件夹:格式:mkdir [选项] DirName mkdir命令功能: 通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限。并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)。 mkdir命令选项说明: 命令中的[选项]一般有以下两种: -m??? 用于对新建目录设置存取权限,也可以用 chmod 命令进行设置。 -p???? 需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则不视为错误。 创建文件:方法一:格式:cat>>filename 使用cat创建文件时,以系统默认的文件属性作为新文件的属性,并接受键盘输入作为文件的内容。输入结束时按Ctrl+d退出并保存文件。 方法二: 格式:touch filename 首先,touch命令用的并不多,主要用于修改指定文件的访问和修改时间属性。当文件不存在时,则创建一个新的文件。touch只能以当前时间作为访问和修改时间属性值创建一个空文件。 ls命令每一列的含义:?查看文件属性(访问,创建,修改时间):命令格式:stat 文件名 第一行:ATime ——文件的最近访问时间,只要读取时间,ATime就会更新 第二行:MTime ——文件的内容最近修改的时间,当文件进行被写的时候,CTime就会更新 第三行:CTime——文件属性最近修改的时间,当文件的目录被修改,或者文件的所有者,权限等被修改时,CTime就会更新。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:34:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |