C语言面试10道题,附带答案,来测试你C语言的掌握程度

2019-08-12     C语言编程开发

第1题: 各个数据类型与零值比较 特别是float时


C语言


第2题: 数组做函数形参传递是

其本质是指针 而非数组名 其大小sizeof为4


C语言


第3题:各种指针 数组 函数时的定义问题 及分析步骤


C语言


第4题: const修饰不能改变以及对他进行改变

以及对字符串常量进行修改是的段错误


#include

void fun(int *p);

void funchar(char *p);

int main()

{

//test1

//const char *p = "aaa";

//*(p+1) = 'A';// [Error] assignment of read-only location '*(p + 1u)'

//printf("%s\\n",p);

/*test2

char *p = "aaa";//他是存放在代码区的

*(p+1) = 'A';10 12//[Warning] deprecated(反对) conversion from string constant to 'char*' [-Wwrite-strings]

printf("%s\\n",p);//可以运行编译但是直接闪退

*/

/*test3 该测试在Windows下编译结果还是5 在linux下gcc编译器结果为6

const int a = 5;

fun((int *)&a);

printf("%d\\n",a);

*/

/*test4*/

const char *p = "aaa";//他是存放在代码区的

//funchar((char**)&p);二级指针

//funchar((char*)&p);两个结果都是 Segmentation fault (core dumped)

printf("%s\\n",p);//可以运行编译但是直接闪退

return 0;

}

void funchar(char *p)

{

*(p+1) = 'A';

}

void fun(int *p)

{

*p = 6;

}


第5题:c和c++ 中的struct有什么不同?

【标准答案】

c和c++ 中struct的主要区别

c中的struct不可以含有成员函数,而c++ 中的struct可以。

c++ 中struct和class的主要区别在于默认的存取权限不同,

struct默认为public ,而class默认为private


第6题:关于子函数调用maollc 主函数free问题研究

本质就是 函数形参复值的是存储空间的值 而非地址。

题目

void getmemory(char *p)

{

p=(char *)malloc(100);//在这里申请

strcpy(p,“hello world”);

}

int main( )

{

char *str=NULL;

getmemory(str);

printf(“%s/n”,str);

free(str);

return 0;

}

会出现什么问题?

【标准答案】

程序崩溃,getmemory中的malloc 不能返回

动态内存,free ()对str操作很危险。


C语言

#include

void getmemory(char *p)

{

printf("%p\\n",p);

//printf("%s\\n",*p);//*p就表示字符了......format ‘%s’ expects argument of type ‘char *’,

//p=(char *)malloc(100);//在这里申请

//strcpy(p,“hello world”);

}

int main( )

{

char *str = "aaaaa";

char *str1 = NULL;//表示str1存储的是null,

printf("%p\\n",str1);

getmemory(str1);//则传递过去 则p存储的也是null //再进行malloc则表示&p形参的这个地址空间中存储的是malloc返回回来的地址。然后子函数结束 p指针释放内存 malloc地址丢失 。

//printf(“%s/n”,str);

//free(str);

return 0;

}


第7题:没有结束标志的字符串数组

题目

char szstr[10];

strcpy(szstr,”0123456789”);

产生什么结果?为什么?

【标准答案】

长度不一样,出现段错误。

C语言


第8题: 数组和链表的区别?

数组属于顺序存储的线性表 访问块 大小限定

链表属于链式存储的线性表 删除插入块 大小无限制

【标准答案】

数组:数据顺序存储,固定大小;

链表:数据可以随机存储,大小可动态改变


第9题:

void main()

{

char aa[10];

printf(“%d”,strlen(aa));

}

会出现什么问题?打印结果是是多少?

strlen是以’\\0’为结束标志的计数函数

sizeof就是与定义的数据类型有关的

【标准答案】

sizeof()和初不初始化,没有关系,

strlen()和初始化有关,打印结果值未知。


第10题 结构体内存对齐问题

给定结构struct A

{

char t:4; ——————1

char k:4; ——————1

unsigned short i:8; ——————2

unsigned long m; ——————4

}; 问sizeof(A) = ?

【标准答案】8

struct name1{

char str; ——————2//内存对齐

short x; ——————2

int num; ——————14

} ;求sizeof(name1)?

【标准答案】8

struct name2{

char str; ——————4

int num; ——————4

short x; ——————2错的 应该是4

}; 求sizeof(name2)?

【标准答案】12

C语言

加C/C++学习交.流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,Linux应用程序开发,Linux内核研究等系统学习路线,更有进阶干货的直播免费学习权限 ,都是大牛带飞 让你少走很多的弯路的 群...号是 546912356

文章来源: https://twgreatdaily.com/zh-hans/yG8xpmwBvvf6VcSZx_Mv.html