c语言面试题

c语言面试题

平台用户的互动中精选与c语言面试题相关的:1、c语言面试题关于字符串,还有字符指针 2、一道c语言面试题 3、一些C语言求职笔试题2 4、面试题 c语言与c++语言有什么区别 6、有关C语言的面试题,没参函数不能返回一个地址吗 7、解答一个c语言笔试题 8、c语言的一个面试题 9、求助大神c语言面试题 10、C语言笔试题!求答案!另送100积分!
c语言面试题
平台用户 2018-06-06 16:46:20

下面是精选平台用户互动时的最佳讨论

pi408637535
pi408637535


pi408637535:c语言面试题关于字符串,还有字符指针

void main(void)
{
char a ;
char *str = &a;
strcpy(str, “hello”);
printf(str);
} //这个是错的,但是我说不明白为什么是错的
下面的解答已被9648人点赞

str是个字符指针,也可以表示为字符数组或者字符串,str = &a;表示str指向的地方只能存下一个字符。

strcpy(str, “hello”);

肯定放不下hello啊,所以会有内存错误


如果你不相信,你把hello换成空串""试试,因为空串占用1字节,str指向的地方能放下。


如果你想知道更多,那么试试下面的这段程序:

#include <stdio.h>
#include <string.h>
void main(void) {
    int a;
    char *str = (char *) &a;
    strcpy(str, "abc");
    printf(str);
}

这段之所可以是因为int类型占4个字节,"abc"也占4个,能放下,"abcd"就不行。


懂了吗?

最后一次编辑时间 推荐于2016-01-20 23:35:11
optimus265
optimus265


optimus265:一道c语言面试题

  void foo(void)
  {
   unsigned int a = 6;
   int b = -20;
   (a+b > 6)? puts("> 6") : puts("<= 6");
  }

请问答案为什么是 >6?

可以说详细地点吗?
谢谢
下面的解答已被4112人点赞
强制类型转换,a+b  变是一个unsigned int 类型,usigned int  的范围 0~4294967295,不存在负数,这样便产生了数据溢出,数据补一位再减去14,即2^32-14,所以会比6要大
最后一次编辑时间 2014-06-27
tmpiero
tmpiero


tmpiero:一些C语言求职笔试题2

19、一个队列入列顺序是1,2,3,4,则输出顺序是 a、4321 b、1234 c、1432 d、3241 20、若进栈顺序为1,2,3,4,假定进栈和出栈可以穿插进行,则可能的出栈顺 序为: a、2413 b、3142 c、3412 d、1234 21、算法的空间复杂度指 a、算法程... 19、一个队列入列顺序是1,2,3,4,则输出顺序是
a、4321 b、1234 c、1432 d、3241
20、若进栈顺序为1,2,3,4,假定进栈和出栈可以穿插进行,则可能的出栈顺
序为:
a、2413 b、3142 c、3412 d、1234
21、算法的空间复杂度指
a、算法程序的长度
b、算法程序的指令条数
c、算法程序占的存储空间
d、算法执行过程中所需的存储空间
22、某数列有1000个各不相同的单元,有低到高排列,要对该数进行二分法检索
,最坏的情况下,需要检查多少个单元
a、1000 b、10 c、100 d、500
23、已知数组A中,每个元素A[I][J]在存储时要占3个字节,设I从0变到4,J从0
到9,分配内存从地址SA开始连续按行存储分配的。问:A[4][7]的起始地址为:
a、SA+84 b、SA+99
c、SA+120 d、SA+141
24、使用双向链表存放数据的优点是
a、提高检索速度 b、方便的插入和删除数据
c、节约存储空间 d、很快回收存储空间
25、若某链表最常用的操作是在最后一个结点之后插入一个结点并删除最后一个
结点,则采用____存储方式最省时间
a、单链表 b、双链表
c、带头节点的双循环链表
d、单循环链表
26、在理想情况下,散列表中查找元素所需比较次数为:
a、n b、0 c、n/2 d、1
27、Ethernet属于数据链路层协议
28、普通交换机和路由器工作在
a、数据链路层和传输曾
b、链路层和网络层
c、都是网络层
d、网络层和传输层
29、以太网的MTU值为
a、500 b、1492 c、1500 d、1982
30、在一个Windows SDK 的基本应用程序框架中,有如下消息循环:
while(GetMessage(&Msg,NULL,0,0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
下面哪个消息使得该消息循环退出运行,从而终止整个应用程序的运行
a、WM_DESTROY b、WM_QUIT
c、WM_CLOSR d、WM_CREATE
31、进程和线程最主要的区别:
a、CPU调度方式不同 b、优先级不同
c、程序入口不同 d、进程有独立的地址空间,线程共享地址空间
32、以下哪项不适合用于进程间通讯
a、socket b、Pipe
c、共享内存 d、全局变量
我只有5分。。。
下面的解答已被8775人点赞
19. b
20. d
21. d
22. b
23. d
24. b
25. c
26. b
27. 正确
28. b
29. c
30. b(蒙的)
31. d
32. d

PS.分多少不要紧,分享精神重要
最后一次编辑时间 推荐于2017-10-01 08:43:58
希2°0121
希2°0121


希2°0121:面试题 c语言与c++语言有什么区别

下面的解答已被4976人点赞
前者没有类的概念,不是面向对象的,后者是
前者只支持/**/注释,后者支持单行注释//
前者以函数为单位,后者以类和全局为单位
前者函数传参只能传值(也就是值复制传递),后者有了引用的概念,可以传引用
前者不支持异常处理,后者有try-catch-finally支持
其他的还有很多,就不一一列举了
最后一次编辑时间 推荐于2016-03-16 03:03:22
神降2te
神降2te


神降2te:有关C语言的面试题,没参函数不能返回一个地址吗

下面的解答已被3950人点赞
看函数的返回值,如果函数的返回类型是指针,那就可以返回地址,跟是否有参数无关
最后一次编辑时间 2018-02-10
cn131nc
cn131nc


cn131nc:解答一个c语言笔试题

只需解答第9题即可 试题3(每小题3分,共12分) 程序说明 输入一行以回车结束的字符串(少于80个字符),删除其中的英文字母和数字字符以外的其它字符,再判断字符串是否对称(不区分大小写)。 运行示例1: Enter a string:Madam I'm Adam Yes 运行... 只需解答第9题即可
试题3(每小题3分,共12分)
程序说明
输入一行以回车结束的字符串(少于80个字符),删除其中的英文字母和数字字符以外的其它字符,再判断字符串是否对称(不区分大小写)。
运行示例1:
Enter a string:Madam I'm Adam
Yes
运行示例2:
Enter a string:elephant
No
程序
#include <stdio.h>
(9)
main()
{ int flag,i,k,length;
char str[80];
printf("Enter a string:");
gets(str);
i=k=0;
while(str[i])
{
if(isupper(str[i]))str[i]=tolower(str[i]);
if(isdigit(str[i])||isalpha(str[i]) )
{(10)
k++;
}
i++;
}
(11)
length=k;
flag=1;
for(k=0;k<=length/2;k++)
if(str[k]!=str[length-k-1])
{
(12)
break;
}
if(flag)printf("yes\n");
else printf("no\n");
}
【供选择的答案】
(9)A、ctype.h B、string.h 答案:A
C、stdio.h D、math.h
(10)A、i++; B、str[k]=str[i];
C、str[i]=str[k]; D、; 答案:B
(11)A、str[i]=’\0’; B、str[i-1]=’\0’;
C、str[k]=’\0’; D、; 答案:C
(12)A、flag=1; B、flag=0;
C、; D、continue; 答案:B
下面的解答已被6963人点赞
这个题,你要知道A,B,C,D四个函数库都包含那些函数。在头文件<stdio.h>中定义了输入输出函数,类型和宏。c语言的话每一个程序都要用到这个头文件。
在<math.h>中定义了一些数学函数和宏,用来实现不同种类的数学运算。这个题中显然用不到。
在头文件<string.h>中定义了一些字符串函数。可以将它们分为两组。也可以排除第一组函数名以str开头,主要进行字符串的操作;第二组函数名以mem开头,按照字符数组的方式操作对象。
在头文件<ctype.h>中定义了一些测试字符的函数。在这些函数中,每个函数的参数都是整型int,而每个参数的值或者为EOF,或者为char类型的字符。<ctype.h>中定义的标准函数列表如下:

int isalnum(int c) 检查字符是否是字母或数字

int isalpha(int c) 检查字符是否是字母

int isascii(int c) 检查字符是否是ASCII码

int iscntrl(int c) 检查字符是否是控制字符

int isdigit(int c) 检查字符是否是数字字符

int isgraph(int c) 检查字符是否是可打印字符

int islower(int c) 检查字符是否是小写字母

int isprint(int c) 检查字符是否是可打印字符

int ispunct(int c) 检查字符是否是标点字符

int isspace(int c) 检查字符是否是空格符

int isupper(int c) 检查字符是否是大写字母

int isxdigit(int c) 检查字符是否是十六进制数字字符

int toupper(int c) 将小写字母转换为大写字母

int tolower(int c) 将大写字母转换为小写字母
最后一次编辑时间 推荐于2016-04-07 10:29:33
zhangrongxia21
zhangrongxia21


zhangrongxia21:c语言的一个面试题

int main() { int x=3; printf("%d",x); return 1; } 问函数既然不会被其它函数调用,为什么要返回1?
下面的解答已被4654人点赞
1、main函数的返回值定义为int型,则函数里应该要有相应类型的返回值。
2、虽然我们不会用程序里的其它函数来调用main函数,但是其实main函数的返回值是可以被系统捕获的,在系统中可以根据main的返回值来判断程序的执行情况。
最后一次编辑时间 2011-08-02
苦恼大了
苦恼大了


苦恼大了:求助大神c语言面试题

#include<stdio.h>
int my(const int a)
{
static int count=a;
return count+a;
}
int main()
{
printf("%d\n%d\n",my(4),my(5));
return 0;
}

结果为什么是
9
10
下面的解答已被5547人点赞
这道题其实出的不好。
函数printf里面my(4)和my(5)执行顺序是不确定的,和编译器有关。按照上面的意思应该是my(5)先执行,count初始化为a,即5,return的是count+a,等于10。执行my(4)的时候,count依然是5,return的是9。
最后一次编辑时间 2013-02-16
comet401
comet401


comet401:C语言笔试题!求答案!另送100积分!

1. 说说下列声明的不同之处 char *a = "abc"; char b[] = "abc"; char c[3] = "abc"; a是一个字符型指针变量,起内容为字符串”abc”的首地址,字符串”abc”存放在常量区。 b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’ c[3]占3个... 1. 说说下列声明的不同之处

char *a = "abc";
char b[] = "abc";
char c[3] = "abc";
a是一个字符型指针变量,起内容为字符串”abc”的首地址,字符串”abc”存放在常量区。
b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’
c[3]占3个字节,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’

2.以下为Windows NT下的32位C程序,请填空 。
例如:int i; long int j; char k; sizeof(i) = 4; sizeof(j) = 8; sizeof(k) = 1;
在32位系统下,整形所占的字节数是4。长整形所占的字节数是8,字符型所占的字节数是1。

(1)
typedef struct
{
int iPara1;
union
{
char iPara2[5];
int iPara3;
char iPara4;
} Params;
char cPara5;
char cPara6[12];
} TEST_INFO_T;

TEST_INFO_T stTestInfo;

请计算
sizeof (stTestInfo ) = 28

(2)
void Func ( char str[3])
请计算
sizeof( str ) =4

(3)
void *p = malloc( strlen(“hello world”) );
请计算
sizeof ( p ) =4
(4)
char str[] = “Hello” ;
char *p = str ;
int n = 10;

请计算
sizeof (str ) =6
sizeof ( p ) =4
sizeof ( n ) =4

3. 请问运行此程序后,在终端上输出的结果是什么?

char acFileName_p[2][50]; /*全局变量,在整个程序运行期间有效*/

int FileExists(char* name)
{
int i;

for(i = 0; i < 2; i++)
{
if( strcmp (( char*) name, (char*)acFileName_p [i] ) = = 0)
{
return 1;
}
}
return 0;
}
void CheckFileName(char *name)
{
static char suffix[3] = "_1";
if( FileExists(name) )
{
if(suffix[1] != '1')
{
name[strlen(name) - 2] = '\0';
}
strcat(name, suffix);
suffix[1]++;
CheckFileName(name);
}
else
{
suffix[1] = '1';
}
}
main
{
char cString1[50];
char cString2[50];

strcpy(acFileName_p[0], "test1");
strcpy(cString1, "test1");
strcpy(cString2, "test2");

CheckFileName(cString1);
printf("Output1 = %s\n", cString1);

CheckFileName(cString2);
printf("Output1 = %s\n", cString2);

strcpy(acFileName_p[1], cString1);
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
}
答:

4、请找出下面代码中的所有错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

(1)#include"string.h"
(2)main()
(3){
(4) char*src="hello,world";
(5) char* dest=NULL;
(6) int len=strlen(src);
(7) dest=(char*)malloc(len);
(8) char* d=dest;
(9) char* s=src[len];
(10) while(len--!=0)
(11) d++=s--;
(12) printf("%s",dest);
(13) return 0;
(14)}
下面的解答已被6137人点赞
第一题
char *a="abc"; 是把字符串“abc”的首地址赋值给指针变量a;
char b[]="abc"; 定义一个字符串数组,因为是字符串 “abc”最后有一个‘\0’ 数组长度为4;
char c[3]="abc" 写法有问题,由于数组大小给定为3,最后一个‘\0’写不进数组,有的编译器会报错。
第二题
1) struct 结构体分配内存特点是:大小等于所有成员所点内存大小的和。
union 联合体分配内存特点是:大小等于成员中占内存最大的内存的大小。所以一共是4个int 13个char 答案是:4*4+13*1=29(相信自己做的)
2) 答案是3 PS:谁给的答案,坑爹呢吧
3) 答案是8 PS:不要被迷惑,这题是陷阱,指针的大小都是无符号长整型 大小是8
4) 答案是6,8(同上题),4。
第三题
1) 答案是
Output1 = test1_1
Output1 = test2
Output1 = test1_1_1
2)(1)头文件没有标准输入输出 #include<stdio.h>
(9)错,左值为指针,右值为数组元素,不能赋值,所以应改为char *s=&src[len]
(11)不应是指针之间的赋值,应该是内容赋值,所以改为 *d++=*s--;
(12)如果按%s即字符串输出的话,dest所指的字符串结尾没有‘\0'结尾可能出现溢出,解决的方法是在(12)前加一句 *d='\0';

有不清楚的扣729480205,一起学习
最后一次编辑时间 推荐于2016-12-01 22:18:07