C语言面试

本文列举了C语言面试中常见的问题,包括指针、内存管理、数据结构和函数等方面。例如,讨论了void Func(char str[100])中sizeof(str)的值,以及如何理解和使用void *p = malloc(100)。还涉及了数组、指针、函数指针、联合体和结构体的内存分配与大小计算,以及对const、static关键字的理解和使用。同时,探讨了堆栈、内存泄漏、字符串操作和内存安全等问题。此外,还给出了如何实现strcpy、整数与字符串相互转换的函数,以及strcmp和字符串逆序的函数。这些问题涵盖了C语言的基础和高级概念,是面试中常见的考察点。
摘要由CSDN通过智能技术生成
(4)void Func ( char str[100])            { ……    ;   }  请计算 sizeof( str ) =                                                                                       
(5)void *p = malloc( 100 );             请计算sizeof ( p ) = 
【标准答案】(4)4、(5)4

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

5、设有以下说明和定义:typedef union {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个字节. 所以它的大小是20data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20

7、请问以下代码有什么问题:                                 char* s=“AAA”;(此种赋值方法“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(int param)的函数。首先是有10个元素的数组,每个元素是指针,每个指针又是指向int型参数int型返回值的函数。

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 不能传递动态内存,main函数中str始终是NULL, free()对str操作很危险。在getmemory这个函数里分配的空间,在此函数执行完后就没有了,所以在main函数里面虽然调用了该函数,但空间已经不存在了,所以无法打印,free也就没意义了。直接写成int main( ){ char *str=NULL;  str=(char *) malloc(100); printf(“%s/n”,str); free(str); return 0;}就好了。

11、 char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?
  【标准答案】长度不一样,出现段错误。只分配了10个字符的空间,写入了11个字符(字符串末尾有\0),访问了未分配的非法空间,会出现段错误。

14、给定结构struct  A{ char t; char k; unsigned short i; unsigned long m;};问sizeof(A) = ?
  【标准答案】8,采用4字节为单位进行分配t分配4个占用1个,k刚好占用第二个,余下2个刚好放入short型I,Long占用4个字节总共4+4=8!它是按照此结构体里占最大空间的数据类型为单位分的,这里面int最大,占4字节,所以以4为单位,给t分配的时候就是4个字节,但它只占了1字节,下来k也是1字节,所以也装进这个空间。

15、 struct name1{char str;short x;int num;};求sizeof(name1)?
【标准答案】分配4字节为一个单位
char 占用一个余下3个
short占用2个余下1个放不下int
int 单独开辟4字节 
刚好8个

16、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值