C语言面试题大汇总之华为面试题2
- 格式:doc
- 大小:1.77 MB
- 文档页数:7
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char *num1,*num2; //两个长长整型数据char *sum;// int temp;int len_num1,len_num2; // 两个长长整型数据的长度int len_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)? len_num1:len_num2;len_min=(len_num1<=len_num2)? len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1 - 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2 - 1]-'0';len_num2--;}for(int j=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char *outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return 0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
华为C++MFC面试题华为C++/MFC面试题pS:答案是本人随笔所写,可能不全甚至错误!请不要盲目将其作为标准答案,不当之处,请指正,谢谢。
C++/MFC 试题一.填空题 (26 分 )1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ ,sizeof(long) = __4__ 。
(3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;2 .请给出如下程序的结果 (2 分 )int a = 3;int b = a << 3; /// 00000011左移三位为00011000,即24a = __3__ ,b = __24__ 。
3 .请给出如下程序的结果 (2 分 )int aaa = 0x01;htonl(aaa) = _16^6___ 。
/// 0x01000000 十六进制数,转换为十进制为16的6次方,即167772164 .请给出如下程序的结果 (2 分)#define MAX_NUM 100+200int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心则 Temp = __2100__ 。
5 .请给出如下程序的结果 (3 分 )char szT emp[1000] = "";int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\ strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp[100];int *pTemp = nTemp;int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!char szResult[200] = "";sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);则 szResult = _1000,0,1000,3,04___ 。
2023华为笔试面试题库华为笔试面试真题一1. 找错void test1(){char string[10];char* str1=0123456789;strcpy(string, str1);}答:表面上并且编译都不会错误。
但假如string数组原意表示的是字符串的话,那这个赋值就没有达到意图。
最好定义为char string[11],这样最终一个元素可以存储字符串结尾符\0;void test2(){char string[10], str1[10];for(int I=0; I10;I++){str1[I] =a;}strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的\0才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=\0,这样就正常了。
void test3(char* str1){char string[10];if(strlen(str1)=10){strcpy(string, str1);}}答:这又会消失第一道改错题的错误了。
strlen(str1)算出来的值是不包含结尾符\0的,假如str1刚好为10个字符+1结尾符,string就得不到结尾符了。
可将strlen(str1)=10改为strlen(str1)10。
2. 找错#define MAX_SRM 256DSN get_SRM_no(){static int SRM_no;int I;for(I=0;I {SRM_no %= MAX_SRM;if(MY_SRM.state==IDLE){break;}}if(I=MAX_SRM)return (NULL_SRM);elsereturn SRM_no;}答:我不知道这段代码的详细功能,但明显有两个错误1,SRM_no没有赋初值2,由于static的声明,使该函数成为不行重入(即不行猜测结果)函数,由于SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。
精选全文完整版(可编辑修改)c语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。
预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。
汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。
静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。
动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。
10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。
1、请问C++的类和C里面的struct有什么区别?类中可以包含函数而struct中只能包含变量,类可以继承,封装,多态和抽象性而struct 不可以2、请讲一讲析构函数和虚函数的用法和作用?析构函数是当一个对象的生命周期结束时,系统调用析构函数来释放对象所占内存空间。
虚函数是实现运行多态的函数3、面向对象的概念对象:现实事物的实体叫对象。
对象是包含现实世界中事物特征的抽象实体,它反应了系统为止保存信息和与之交互的方法。
对象=数据+作用于这些数据的操作。
类:类是对象的模板。
即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。
类是在对象之上的抽象,对象则是类的具体化,是类的实例。
类可有其子类,也可有其它类,形成类层次结构。
消息:消息是对象之间进行通信的一种规格说明。
一般它由三部分组成:接收消息的对象、消息名及实际变元。
面向对象主要特征:封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。
封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。
封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。
它由类的派生功能体现。
一个类直接继职其它类的全部描述,同时可修改和扩充。
继职具有传达室递性。
继职分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。
类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。
继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:对象根据所接收的消息而做出动作。
同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char *num1,*num2; //两个长长整型数据char *sum;// int temp;int len_num1,len_num2; // 两个长长整型数据的长度int len_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)? len_num1:len_num2;len_min=(len_num1<=len_num2)? len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1 - 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2 - 1]-'0';len_num2--;}for(int j=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char *outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return 0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
c语言面试题目100及最佳答案作为IT行业人士需要掌握的最基本的计算机语言—c语言,如今的地位只高不低,c语言掌握程度的高低往往在面试的时候可以完全表现出来,而有些问题是大家平时似乎是知道的,但却不能完整准确地回答上来的,今天大家带来精心整理的C语言经典面试题,希望对大家有所帮助。
1、请填写bool , float, 指针变量与“零值”比较的if语句。
提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。
例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。
(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !flag )100 条经典 C语言笔试题目(2)请写出float x 与“零值”比较的if 语句:【标准答案】 const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
100 条经典 C语言笔试题目(3)请写出char *p 与“零值”比较的if 语句【标准答案】 if (p == NULL) if (p != NULL)2、以下为Linux下的32 位C 程序,请计算sizeof 的值。
char str[] = “Hello” ;char *p = str ;i nt n = 10;请计算(1)sizeof (str ) = (2)s i zeof ( p ) =(3)sizeof ( n ) =【标准答案】(1)6、(2)4 、(3 )4(4)void Func ( char str[100]){…… ;}请计算sizeof( str ) =(5)void * p = mall oc( 100 );请计算sizeof ( p ) =【标准答案】(4)4、(5)44、用变量a 给出下面的定义e) 一个有10个指针的数组,该指针是指向一个整型数的;f) 一个指向有10个整型数数组的指针;g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a[10]; f)int (*a)[10]g)int (*a)(int); h) int (*a[10])(int)5、设有以下说明和定义: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个字节. 所以它的大小是20data 是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是20 + 32 = 52.当然…在某些16位编辑器下, int 可能是2字节,那么结果是int2 + DATE10 + double8 = 206、请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,“hello”);printf(str);return 0;}【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。
1、在C语言中,以下哪个关键字用于定义一个结构体类型?A. classB. structC. unionD. enum(答案)B2、关于C语言的指针,以下说法错误的是?A. 指针是存储变量地址的变量B. 指针可以进行加减运算,但结果仍然是地址C. 空指针不指向任何有效的内存地址D. 指针变量的类型决定了它可以指向的变量类型及占用的内存大小(答案)D3、在C语言中,若要使用标准输入输出库函数,必须包含哪个头文件?A. <stdio.h>B. <stdlib.h>C. <string.h>D. <math.h>(答案)A4、以下哪个不是C语言的基本数据类型?A. intB. floatC. charD. string(答案)D5、在C语言中,数组名作为函数参数时,传递的是?A. 数组的第一个元素的值B. 数组所有元素的值C. 数组第一个元素的地址D. 数组的长度(答案)C6、关于C语言的循环结构,以下说法正确的是?A. while循环和do-while循环至少执行一次循环体B. for循环中的初始化表达式可以省略,但循环条件表达式和循环后表达式不能省略C. 三种循环结构(while, do-while, for)完全可以相互替代,没有区别D. 在任何情况下,for循环都可以被while循环替代,但反之不然(答案)D(注:虽然D 选项在技术上不完全准确,因为有些情况下for循环的简洁性是不可替代的,但从循环功能上来看,for循环能做的事情while循环也能做到,只是可能更冗长。
这里选择D作为最接近正确的答案。
)8、关于C语言的函数,以下说法错误的是?A. 每个函数都可以有返回值,返回值类型由函数声明时指定B. 函数可以有参数,参数列表在函数名后的括号内指定C. main函数是C程序的入口点D. 在一个C程序中,可以定义多个同名但参数列表不同的函数(答案)A(注:A选项错误在于并非每个函数都必须有返回值,void类型的函数就没有返回值。
C语言面试题大汇总之华为面试题及答案(5篇)第一篇:C语言面试题大汇总之华为面试题及答案C语言面试题大汇总之华为面试题及答案2007-01-24 09:19作者:罗可龙出处:csdn责任编辑:罗可龙1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用“::”局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错4、语句for(;1;)有什么问题?它是什么意思?答:和while(1)相同。
5、do……while和while……do有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环6、请写出下列代码的输出内容以下是引用片段:#includemain(){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf(“b,c,d:%d,%d,%d”,b,c,d);return 0;}答:10,12,1207、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
C语言面试题大汇总之华为面试题216.谈谈Windows DNA结构的特点和优点。
答:Windows Distributed interNet Application Architecture(Windows分布式应用结构,简称Windows DNA)是微软创建新一代高适应性商业解决方案的框架,它使公司能够充分地挖掘数字神经系统的优点。
Windows DNA是第一个将Internet、客户/服务器、和用于计算的PC模型结合并集成在一起的为新一类分布式计算方案而设计的应用软件体系结构17.网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答:1)进程:子进程是父进程的复制品。
子进程获得父进程数据空间、堆和栈的复制品。
2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。
同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
思科1. 用宏定义写出swap(x,y)答#define swap(x, y)x = x + y;y = x - y;x = x - y;2.数组a[N],存放了1至N-1个数,其中某个数重复一次。
写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a[],int N)答:int do_dup(int a[],int N) //未经调试{int sun = 0;int sum2;for(int i=0;i<N;++i){Sum+=a[i];}Sum2 = (1+N-1)*N/2;Return (sum-sum2);}3 一语句实现x是否为2的若干次幂的判断答:方法1)int i = 512;cout << boolalpha << ((i & (i - 1)) ? false : true) << endl; //位与为0,则表示是2的若干次幂2)return (x>>N==1);4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p 为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b00010001,p=4,n=3转换后x=0b0110 0001答:unsigned int intvert(unsigned int x,int p,int n) //假定p=4,n=3void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )if( 'a'<=str[i] && str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl; UpperCase( str );cout << str << endl;答:函数内的sizeof有问题。
根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
注意:数组名作为函数参数时,退化为指针.数组名作为sizeof()参数时,数组名不退化,因为sizeof不是函数.4. 一个32位的机器,该机器的指针是多少位指针是多少位只要看地址总线的位数就行了。
80386以后的机子都是32的数据总线。
所以指针的位数就是4个字节了。
5.指出下面代码的输出,并解释为什么。
(不错,对地址掌握的深入挖潜) main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a是长度为5的int数组指针,所以要加 5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*)a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].6.请问以下代码有什么问题:1).int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}答;没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
Strcpy的在库函数string.h中.程序的主要错误在于越界进行内存读写导致程序崩溃//2).char* s="AAA";printf("%s",s);s[0]='B';printf("%s",s);有什么错?答: "AAA"是字符串常量。
s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
答:#define Min(X, Y) ((X)>(Y)?(Y):(X)) //结尾没有;2、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。
答:while(1){}或者for(;;) //前面那个较好3、关键字static的作用是什么?答:1)定义静态局部变量,作用域从函数开始到结束.2) 在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;3) 在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝4、关键字const有什么含意?答 :1)表示常量不可以修改的变量。
2)可以修饰参数,作为输入参数.3)修饰函数,防止以外的改动.4)修饰类的成员函数,不改变类中的数据成员.5、关键字volatile有什么含意?并举出三个不同的例子?答: 提示编译器对象的值可能在编译器未监测到的情况下改变。
例子: 硬件时钟;多线程中被多个任务共享的变量等6. int (*s[10])(int) 表示的是什么啊int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
1.有以下表达式:int a=248; b=4;int const c=21;const int *d=&a;int *const e=&b;int const *f const =&a;请问下列表达式哪些会被编译器禁止?为什么?答:*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;*c 这是个什么东东,禁止*d 说了是const,禁止e = &a 说了是const 禁止const *f const =&a; 禁止2.交换两个变量的值,不使用第三个变量。
即a=3,b=5,交换之后a=5,b=3;答:有两种解法, 一种用算术算法, 一种用^(异或)a = a + b;b = a - b;a = a - b;ora = a^b;// 只能对int,char..b = a^b;a = a^b;ora ^=b ^= a;3.c和c++中的struct有什么不同?答: c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。
c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private.4.#include <stdio.h>#include <stdlib.h>void getmemory(char *p){p=(char *) malloc(100);}int main( ){char *str=NULL;getmemory(str);strcpy(p,"hello world");printf("%s/n",str);free(str);return 0;}答: 程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str 操作很危险5.char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?答;正常输出,长度不一样,会造成非法的OS,覆盖别的内容.6.列举几种进程的同步机制,并比较其优缺点。
答:原子操作信号量机制自旋锁管程,会合,分布式系统7.进程之间通信的途径答共享存储系统消息传递系统管道:以文件系统为基础。