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 str[100]){

....;

}

请计算 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 *a[10] 整数指针的数组
f) 一个指向有10个整型数数组的指针; int (*a)[10] 指向整数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返
回一个整型数;
h) 一个有10个指针的数组,该指针指向一个函数,该
函数有一个整型参数并返回一个整型数;
【标准答案】e)int * a[10]; f)int (*a)[10]
g)int (*a)(int); h) int (*a[10])(int)

4.设有以下说明和定义:
typedef u nion {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句printf("%d",sizeof(struct date)+sizeof(max)); 的
执行结果是:_____
【标准答案】DATE是一个union, 变量公用空间. 里面最
大的变量类型是int[5], 占用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);
s[0]='B';
printf("%s",s);
有什么错?
【标准答案】"AAA" 是字符串常量。s是指针,指向这个
字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0] 的赋值操作是不合法
的。

8.int (*s[10])(int) 表示的是什么啊
【标准答案】int (*s[10])(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操作很危险。

相关推荐
huangzhendong19 分钟前
C语言预处理详解
c语言·预处理
bbppooi15 分钟前
排序学习整理(1)
c语言·数据结构·学习·算法·排序算法
摇滚侠30 分钟前
javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET
xml·java·开发语言
西域编娃1 小时前
探索Scala:文本分析与文件操作的艺术
开发语言·后端·scala
是糖不是唐1 小时前
代码随想录算法训练营第五十五天|Day55 图论
c语言·数据结构·算法·图论
西域编娃1 小时前
解锁Scala编程:深入文本分析与数据处理的艺术
大数据·开发语言·后端·scala
爱吃香菜---www1 小时前
Scala中字符串
开发语言·后端·scala
睎zyl1 小时前
scala统计词频
开发语言·后端·scala
西猫雷婶1 小时前
python学opencv|读取图像
开发语言·人工智能·python·opencv·计算机视觉
Betty_蹄蹄boo1 小时前
scala统计词频
开发语言·c#·scala