100条经典C语言题第一天(1-10)

准备复习一下C语言,刷一些和面试相关的问题。

  1. 请填写 bool, float, 指针变量 与 "零值"比较的if语句 A.Bool flag 与 "零值"比较的if语句 1为true 0为false

分析 这里的flag 是布尔类型的变量

标准的写法是 if(flag) 或者 if(!flag)

(If(flag == true)也能实现效果,但是写法赘余,不规范)

B.请写出float x 与 "零值"比较的if语句

标准的写法:

Const float EPSINON = 0.00001;

If((x>=-EPSINON) && x<=EPSINON)

注:不可用将浮点数用==或者!=与数字进行比较,应该转换成>=或<=

(如果你检查是否严格等于0,可以if(x==0.0f),但是由于精度问题,不推荐)

C.请写出char *p与零值比较的if语句

标准答案 if( p == NULL) if(P!=NULL)

这里是判断指针是否指向空

2.以下为Linux下的32为C程序,请计算sizeof的值

Char str\[\] = "Hello";

Char *p = str;

Int n =10;

请计算 sizeof(str) sizeof(p) sizeof(n)

标准答案:6: 五个字符+空自符, 4 , 4

Void Func (char str100){

....;

}

请计算 sizeof(str) = 4

在C语言中,当你将数组作为函数参数传递时,它会被当作指针来处理。因此,在函数Func内部,sizeof(str)并不会返回整个数组的大小(即100),而是返回指针的大小。

指针的大小是4字节(对于32位系统)或8字节(对于64位系统)。

Void *p = malloc(100);

请计算sizeof(p) = 4

当你使用malloc函数分配内存时,你得到的是一个指向所分配内存块的指针。在C语言中,指针的大小通常不依赖于它所指向的内存块的大小。

3.用变量a 给出下面的定义
e) 一个有10个指针的数组,该指针是指向一个整型数
的; int *a10 整数指针的数组
f) 一个指向有10个整型数数组的指针; int (*a)10 指向整数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返
回一个整型数;
h) 一个有10个指针的数组,该指针指向一个函数,该
函数有一个整型参数并返回一个整型数;
【标准答案】e)int * a10; f)int (*a)10
g)int (*a)(int); h) int (*a10)(int)

4.设有以下说明和定义:
typedef u nion {long i; int k5; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句printf("%d",sizeof(struct date)+sizeof(max)); 的
执行结果是:_____
【标准答案】DATE是一个union, 变量公用空间. 里面最
大的变量类型是int5, 占用20个字节. 所以它的大小是
20
data 是一个struct, 每个变量分开占用空间. 依次为int4 +
DATE20 + double8 = 32.
所以结果是20 + 32 = 52.
当然... 在某些16位编辑器下, int 可能是2字节,那么结果
是int2 + DATE10 + double8 = 20

5.以下代码的问题

int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}

问题:

缓冲区溢出:char a; 只分配了一个字符的空间,但是 strcpy(str, "hello"); 试图将五个字符(加上一个空字符 '\0')复制到这块内存。这会导致超出分配的内存范围,覆盖相邻的内存区域。

7.请问以下代码有什么问题:
char* s="AAA";
printf("%s",s);
s0='B';
printf("%s",s);
有什么错?
【标准答案】"AAA" 是字符串常量。s是指针,指向这个
字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s0 的赋值操作是不合法
的。

8.int (*s10)(int) 表示的是什么啊
【标准答案】int (*s10)(int) 函数指针数组,每个指针
指向一个int func(intp aram) 的函数。

9.c和c++ 中的struct有什么不同?
【标准答案】c和c++ 中struct的主要区别是c中的struct
不可以含有成员函数,而c++ 中的struct可以。c++ 中
struct和class的主要区别在于默认的存取权限不同,
struct默认为public ,而class默认为private

10、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操作很危险。

相关推荐
weixin_4173968332 分钟前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
某不知名網友1 小时前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
java_nnnn1 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
qetfw2 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!2 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
学Linux的语莫2 小时前
python中类的常见写法
开发语言·python·状态模式
需要8262 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal2 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi
譕痕2 小时前
Rabbit 实例
java·开发语言·java-rabbitmq
综合简报3 小时前
黑五海外发稿投给谁?三类海外媒体发稿渠道的分工
开发语言·php·媒体