C语言面试题每天10道题 ——第一天

第一题 各个数据类型与零值比较 特别是float时
这里写图片描述

第二题 数组做函数形参传递是 其本质是指针 而非数组名 其大小sizeof为4
这里写图片描述

第三题各种指针 数组 函数时的定义问题 及分析步骤
这里写图片描述

第4题 const修饰不能改变以及对他进行改变 以及对字符串常量进行修改是的段错误

#include <stdio.h>
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操作很危险。

这里写图片描述

#include <stdio.h>


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”);
产生什么结果?为什么?
【标准答案】长度不一样,出现段错误。
这里写图片描述

第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

  • 2
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值