1.一个32位的机器,该机器的指针是多少位?
指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。
所以指针的位数就是4个字节了。
2.局部变量能否和全局变量重名?
能,局部会屏蔽全局。
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而
不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内
都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
3.判断x=x+1,x+=1,x++哪个效率最高?为什么?
x++的效率最高,直接去出来+1后在放回原来的地址。
x=x+1最低, 因为执行步骤如下: <1>读取右x的地址; <2>x+1; <3>读取左x的地址;
<4>将右值传给左边的x(编译器并不认为左右两边的x的地址相同)。
4.main函数执行前后会执行什么
首先main()函数只不过是提供了一个函数入口,在main()函数中的显示代码执行之前,
会由编译器生成_main函数,其中会进行所有全局对象的构造以及初始化工作。简单来
说对静态变量、全局变量和全局对象来说的分配是早在main()函数之前就完成的,所以
C/C++中并非所有的动作都是由于main()函数引起的。
同理在main()函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,
所以在main()函数还会执行相应的代码。
一个C程序的执行是从___A__。
A、本程序的main函数开始,到main函数结束
B、本程序的main函数开始,到本程序文件的最后一个函数结束
C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
D、本程序文件的第一个函数开始,到本程序main函数结束
5.动态链接和静态链接
绝大多数编译器并不是一个单一的庞大程序,他们通常由多达六七个稍小的程序所组成。
目标文件并不能直接执行,它首先需要载入到连接器映像,连接器确认main 函数为初始化
进入点,把符号应用绑定到内存地址,把所有的目标文件集中在一起,加上库文件,从而
产生可执行文件。
静态链接:把需要使用的每个库函数的一份拷贝加入到可执行文件中,现在静态链接基本淘汰。
动态链接:可执行文件只是包含了文件名,系统提供了庞大的函数库集合,让在如期运行时能
够寻找到程序所需要的函数库。
动态链接的优点:可执行文件的体积非常小,但是运行稍微慢些,但是动态链接可以有效的利用
磁盘空间。
C语言 - 静态链接和动态链接_c语言 动态链接 静态链接-CSDN博客
6.什么是右值引用,跟左值又有什么区别
左值:能对表达式取地址,一般指表达式结束后依然存在的持久对象。
右值:不能对表达式取地址,一般表达式结束后就不再存在的临时对象。
右值和左值引用的区别:左值可以寻址,而右值不行,左值可以被赋值,右值不能被赋值,
可以用来给左值赋值。左值可变,右值不可变。
7.float(单精度浮点型)和double(双精度浮点型)
float:1bit(符号位)+8bit(指数位)+23(尾数位) 2^23=8388608,共7位,意味着最多有
7位有效数字。
double:1bit(符号位)+11bit(指数位)+52bit(尾数位) 2^52=4503599627370496. 一共16位,
同理double的精度为15~16位。
#include <stdio.h>
int main(void)
{
float m = (float)3.14;
double n = 10.5;
printf("%f,%lf\n",m,n);
return 0;
}
输出:3.140000,10.500000 因为%lf只保留小数点后6位。
8.溢出
short int a,b;
A=10000;
B=1000000;
输出时a可以正确输出,但是b不能,因为b不能正确的存储,short只有16bit,转化为10进制只有5位。
char 占8位1字节转化为10进制只有3位。
short占16位2字节转化为10进制只有5位。
int 占32位4字节转化为10进制只有10位。
long 占32位4字节转化为10进制只有10位。
float占32位4字节转化为10进制只有10位。
double占64位8字节。
9.字符常量
char beta; beta=’ab’; 是错误的,改正:char beta; beta=’ab/’
char beta; beta=”a”; 是错误的,改正:char beta; beta=’a’
定义字符串数组:char a[ ] = "abcse"
非图形字符,如退格,换行,也可以表示成字符型常量。表示方法是使用转义字符”/”;
若有说明语句:char c= ‘\64’ ; 则变量C包含: A
A. 1个字符 B. 2个字符 C. 3个字符 D. 说明不合法,C值不确定
已知char b[5],*p=b; ,则正确的赋值语句是 C
A. b=“abcd” ; B. *b=“abcd”; C. p=“abcd”; D. *p=“abcd”;
下列可以正确表示字符型常量的是 D
A、297 B、"a" C、"\n" D、'\t'
设有定义:char*C;以下选项中能够使C正确指向一个字符串的是(A )。
A char str( )=”strin9”;C=str;
B scanf(”%s”,C.);
C c=getchar( );
D *c=”strin9”;
10.不同数据类型数据间的混合运算
当char和short一起运算时,一律转换成int类型后再运算。
当short和long一起运算时,一律转换成long类型后再运算。
当int和flont或double一起运算时,一律把int,flont转换成double类型再运算。