C面试题总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C面试题
1.各种变量的定义
int a;
unsigned long b;
float c;
double d;
char e;
int f[];
int *g()
{
}
注意下面几个后面的分号:
struct stu{};
union {};
enum {};
2.用变量a 给出下面的定义
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针,它指向的指针是指向一个整型数
d)一个有10 个整型数的数组
e) 一个有10 个指针的数组,该指针是指向一个整型数的。
f) 一个指向有10 个整型数数组的指针g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h)一个有10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
结果:
a)int a;
b)b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
f) int (*a)[10];
g) int (*a)(int);
h) int (*a[10])(int);
3.讲一下hello.c的内容
#include
int main()
{
printf(“hello world!\n”);
return 0;
}
1.程序的组成:定义和函数
2.程序的main:程序的主函数,程序的入口
3.程序的语法
4.函数调用:printf
5.头文件包含:.h文件
6.转义符:\n
4.打印杨辉三角
#include
int main()
{
int a[11][20],
inti,j;
for(i=0;i<11;i++)
{
for(j=0;j<20;j++)
{
a[i][j]=0;
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
if(j<1)
a[i][j]=1;
else if(i==0)break;
else
a[i][j]=a[i-1][j-1]+a[i-1][j]; }
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
二维数组的应用
5.sizeof 和 strlen 的区别
strlen用来求字符串的长度用的,是一个函数
而sizeof是用来求指定变量或者变量类型等所占内存大小用的,是一个函数
6.char的寻址范围
#include
#include
int main()
{
char a[1000];
int i;
for(i=0;i<1000;i++)
{
a[i]=-1-i;
}
printf("%d",strlen(a));
return 0;
}
结果是255,注意有符号和无符号的区别,有符号为-128 - 127,-128减1为127,无符号为0-255,stlrlen遇0结束,所以结为255。
7. 从上题可以引出为什么2的取反为-3
计算机都以补码存储数据,2取反后首位为1,默认有符号,计算结果为-3.
8.register static const关键词的用法
1.register:请求编译器尽可能的将变量存在cpu的内部寄存器中,只能修饰变量
(1). 修饰变量类型必须是cpu所能接收的;
(2). 变量可能不是在内存中存储,所以不能用&来获取变量地址
(3). 一些常用变量,循环变量可以用register来定义,加快程序执行效率,节省 cpu从内部抓取数据到内存的时间。
2.static:体验程序的封装性,static修饰的变量存储在全局数据区的静态数据段,如果修饰的变量不做初始化,则默认为0。
1)可以用来修饰变量:
(1)修饰局部变量,使其变成了静态局部变量:延长生命周期至整个程
序结束后再释放(开发时可替代全局变量)
Static局部变量只被初始化一次,下一次依据上一次结果值。
(2) 修饰全局变量:只能在本文件.c访问,不能在其他文件中访问(多
线程时可用)
2)修饰函数:使函数只能在本文件中调用(当函数不想被其他调用时) Static函数在内存中只有一份,普通函数在每个调用中维持一份拷贝。
3.const: const修饰一个变量,其为只读变量,应在修饰时做初始化,不能通过所修饰的变量名来修改其内存空间所对应的值。
9.struct的字对齐,半字对齐
#include
strcut stu
{
int a;
char b;
};
int main()
{
printf(“%d\n”,sizeof(stu));
return 0;
}
结果为8,struct遵循字对齐。
10.共用体
共用体所有变量共用一个地址,同时只能定义一个变量,后面的变量会把前面的覆盖
#include
union ou
{
int a;
char b;
};
int main()
{
ou.a = 48;
printf(“%d %c”,ou.a,ou.b);
return 0;
}
结果为48 0,体现了共用体的特性