文章目录
- C语言
-
-
- 简述编译运行一段代码的过程
- 静态链接和动态链接有什么区别
- 静态链接库和动态链接库有什么区别
- 4字节对齐
- #define和const的区别,const比#define的优点
- 数组和指针的区别
- malloc、free和new、delete的区别与联系
- free函数怎么知道释放内存大小
- Assert
- void 函数的返回值问题
- C语言函数嵌套定义与嵌套调用
- 同一个数组中的所有数组元素的数据类型必须相同吗
- 静态存储区和动态存储区
- delete和delete[]区别
- 数组指针和指针数组
- 函数指针和指针函数
- 定义常量谁更好?# define还是 const
- `*(a[1]+1)、*(&a[1][1])、(*(a+1))[1]`表示什么意思
- 不使用流程控制语句,如何打印出1~1000的整数
- a是数组,(int*)(&a+1)表示什么意思
- 以下程序的输出
- 数组下标可以为负数吗
- C语言宏中"#"和"##"的用法
- typedef和 define有什么区别
- 数组名和指针的区别与联系
- strlen("\0") =? sizeof("\0")=?
- 不使用 sizeof,如何求int占用的字节数
- 不能使用任何变量,如何实现计算字符串长度函数
- 什么是逗号表达式
- 引申:int i=(j=4,k=8,l=16,m=32),则i的值是多少
- C语言中 struct与 union的区别是什么
- 全局变量和静态变量的区别
- 理解非常复杂的声明
- 变量定义和变量声明
- 一个十六进制的数占用多少字节
- 嵌人式编程中,什么是大端?什么是小端
- 引申 如何判断计算机处理器是大端,还是小端
- 如何进行大小端的转换
- 不用除法操作符如何实现两个正整数的除法
- 引申:如何只用逻辑运算实现加法运算
- 引申2:引申2:如何只用逻辑运算实现乘法运算
- 不使用if/?:switch及其他判断语句如何找出两个int型变量中的最大值和最小值
- 一些结构声明中的冒号和数字是什么意思
- 如何求解整型数的二进制表示中1的个数
- 求二进制中0的个数
- 不能用 sizeof()函数,如何判断操作系统是16位,还是32位
- Makefile包含几部分;
- ++a和a++那个运算效率高,为什么?
- 左值和右值
- (a++)+=a是否合法
- 指针进行强制类型转换后与地址进行加法运算,结果是什么
- # include< filename. h>和# nclude" filename. h"有什么区别
- 如何使用 define声明个常数,用以表明1年中有多少秒(忽略闰年问题)
- 下面三个有什么区别?
- Heap与stack的差别。
- 请简述栈在C语言中的作用
- 要对绝对地址0x100000赋值,我们可以用
- 访问固定的内存位置
- 已知一个数组table,用一个宏定义,求出数据的元素个数
- 输出多少?并分析过程
- 有符号数和无符号数
- 交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;
- 求一个正整数的开方,要求不能使用库函数sqrt,结果精度在0.01即可。(深圳联发科)
- 用宏定义写出swap(x,y)
- 以下代码中的两个sizeof用法有问题吗?
- 短路求值
- 下面代码有什么问题
- 关键字volatile有什么含意?并举出三个不同的例子?
- int (*s[10])(int) 表示的是什么啊
- 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变
- 分析下面的程序(释放malloc的空间后,为什么要把指针指向NULL 看这个)
- 在子函数中malloc分配内存和free释放内存的方法
- 请问以下代码有什么问题:
- 分析程序
- 分析程序
- 程序的输出
- 程序的输出
- 程序的输出
- 程序输出多少(重要)
- 设有以下说明和定义:
- 语句for( ;1 ;)有什么问题?它是什么意思?
- 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
- 如何引用一个已经定义过的全局变量?
- static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?(重要)
- 关键字static的作用是什么?
- 引申1:在C语言中,为什么 static变量只初始化一次?
- 引申2:在头文件中定义静态变量是否可行,为什么?
- 常量指针,指向常量的指针,指向常量的常量指针
- const作用
- 局部变量能否和全局变量重名?
- 改错题
- 下面这个程序执行后会有什么错误或者效果:
- 请找出下面代码中的所以错误
- 用两个栈实现一个队列的功能?要求给出算法和思路!
- 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个
-
C语言
简述编译运行一段代码的过程
源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,源程序就是所写好的代码。
可执行程序,即常说的.exe程序,可以执行程序,完成计算机功能。在C语言中,.c文件就是所谓的源文件。
源程序到可执行程序的过程。在这个过程中,会发生如下的变化:
.c文件生成.obj文件的过程,称为编译,.obj文件生成到.exe文件的过程,称为链接。
.obj文件就是一个是程序编译生成的二进制文件,当.exe文件生成以后.obj文件就会被删除。
事实上,.c文件生成.exe文件的过程总共是经历了预处理,编译,汇编,链接,这四个过程。
1、预处理
为了接下来能够解释的更加清楚,使用linux平台下的gcc编译器解释。先书写一个非常简单的程序来介绍:
test.c
#include<stdio.h>