以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
- 格式:doc
- 大小:25.50 KB
- 文档页数:1
以下为WindowsNT下的32位C程序,请计算sizeof的值以下为Windows NT 下的32 位C++程序,请计算sizeof 的值void Func ( char str[100]) { 请计算sizeof( str ) = 4 (2 分)} char str[] = “Hello”; char *p = str ; int n = 10; 请计算sizeof (str ) = 6 (2 分)sizeof ( p ) = 4 (2 分)sizeof ( n ) = 4 (2 分)void *p = malloc( 100 ); 请计算size标准答案:if (p == NULL) if (p != NULL) 如下写法均属不良风格,不得分。
if (p == 0) if (p != 0) if (p) if (!)参考答案:namespace,是指标识符的各种可见范围。
C++标准程序库中的所有标识符都被定义于一个名为std的namespace 中。
和是不一样,前者没有后缀,实际上,在你的编译器include 文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
例如,如果模1. C++的类和C里面的struct有什么区别?struct成员默认访问权限为public,而class成员默认访问权限为private2. 析构函数和虚函数的用法和作用析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。
虚函数是指被关键字virtual 说明a) #i nclude union { int i; char x[2]; }a; void main() { a.x[0] = 10; a.x[1] = 1; printf(“%d”,a.i); } 答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)b) main() { union{ /*定义一个联合*/ int i; struct{ /*在联合中定义一个结构*/ c。
C语言题一、判断题(每题1分,共计10分)1.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参。
()2.使用float b定义的外部变量存放在内存中的动态存储区。
()3.如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一个变量,则该变量为局部变量,只在该复合语句中有效;。
()4.int (*ptr) (),则ptr是一维数组的名字。
()5.指针在任何情况下都可进行>,<,>=,<=,==运算。
()6.形参是局部变量,函数调用完成即失去意义。
()7.C语言程序总是从main()函数开始执行,C语言程序中的main()函数必须放在程序的开始部分。
()8.在C语言程序中,函数的定义不能嵌套,但函数的调用可以嵌套。
()9.若函数调用时用数组名作为函数参数,实参与其对应的形参共占用同一段存储空间,在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组。
()10.局部变量不能和全局变量重名。
()二、(共计10分)1. 以下为Windows NT 下的32 位C程序,请计算sizeof 的值char str[] = “Hello” ;char *p = str ;int n = 10;long d=12;请计算sizeof (str ) =__ (0.5分)sizeof ( p ) =__ (0.5分)sizeof ( n ) =__ (0.5分)sizeof(d)=__(0.5分)2. 请给出如下程序的结果int a = 3;int b = a << 3;a = ____ ,(0.5分)b = ____(0.5分)3.int i=10, j=10, k=3; k*=i+j; k 最后的值是__(1分)4. 1.-1,2,7,28,,126请问28和126中间那个数是__(2分)5.如有定义语句int a[]={1,8,2,8,3,8,4,8,5,8}; ,则数组a的大小是___(1分)6.以下程序:#include<stdio.h>void main(){ int x=10,y=10;printf("%d %d\n",x--,--y);}输出结果为:___(0.5分),___ (0.5分)7.函数调用语句:func((exp1,exp2),(exp3,exp4,exp5));含有实参个数为:___(2分)。
姓名:___________ 时间:___________DCCBB AADAD一、选择题(1*10=10)1.如果派生类以proctected方式继承基类,则原基类的protected和public 成员在派生类的访问性分别是:DA.public和public B.public和protected C.protected和public D.protected和protected解析:通过protected方式继承基类后,原基类的私有成员不可访问,而protected和public成员均变成protected成员。
答案:D2.有如下头文件:int F1();static int F2();classs CA{public:int F3();static int F4();};在所描述的函数中,具有隐含this指针的是:CA.F1 B.F2C.F3 D.F4本题考查的是this指针。
this指针式一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。
当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。
this指针是指向对象本身的指针,它只存在于类的非静态成员中。
f1,f2不是成员函数,不存在隐含指针;f4为静态成员函数,也不含有this指针;含有this指针的函数在调用时按thiscall调用约定调用。
故本题答案为C。
3.派生类的成员函数不能访问基类的:CA.共有成员和保护成员B.共有成员C.私有成员D.保护成员本题考查的是继承的类型。
类的继承方式有公有继承、保护继承和私有继承三种方式。
对于公有继承基类中的成员访问属性不变,对于保护和私有继承基类中的成员转换为相应的访问类型。
但是如果基类成员的访问属性为private的,则不能被继承。
故本题答案为C。
4.按照“后进先出”原则组织数据的数据结构是BA.队列B.栈C.双向链表D.二叉树答案为B。
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,变量公用空间。
五、编写strcpy函数(10分)已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpychar *strcpy(char *strDest, const char *strSrc);{assert((strDest!=NULL) && (strSrc !=NULL)); // 2分char *address = strDest; // 2分while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分NULL ;return address ; // 2分}(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?答:为了实现链式表达式。
// 2分例如int length = strlen( strcpy( strDest, “hello world”) );六、编写类String的构造函数、析构函数和赋值函数(25分)已知类String的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数private:char *m_data; // 用于保存字符串};请编写String的上述4个函数。
标准答案:// String的析构函数String::~String(void) // 3分{delete [] m_data;// 由于m_data是内部数据类型,也可以写成delete m_data; }// String的普通构造函数String::String(const char *str) // 6分{if(str==NULL){m_data = new char[1]; // 若能加NULL 判断则更好*m_data = …\0‟;}else{int length = strlen(str);m_data = new char[length+1]; // 若能加NULL 判断则更好strcpy(m_data, str);}}// 拷贝构造函数String::String(const String &other) // 3分{int length = strlen(other.m_data);m_data = new char[length+1]; // 若能加NULL 判断则更好strcpy(m_data, other.m_data);}// 赋值函数String & String::operate =(const String &other) // 13分{// (1) 检查自赋值// 4分if(this == &other)return *this;// (2) 释放原有的内存资源// 3分delete [] m_data;// (3)分配新的内存资源,并复制内容// 3分int length = strlen(other.m_data);m_data = new char[length+1]; // 若能加NULL 判断则更好strcpy(m_data, other.m_data);// (4)返回本对象的引用 // 3分return *this;}华为笔试2006-2-28 星期二(Tuesday) 晴1、局部变量能否和全局变量重名?答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
1. C++的类和C里面的struct有什么区别?struct成员默认访问权限为public,而class成员默认访问权限为private 2. 析构函数和虚函数的用法和作用析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。
虚函数是指被关键字virtual说明的函数,作用是使用C++语言的多态特性3. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?1) 全局变量的作用用这个程序块,而局部变量作用于当前函数2) 前者在内存中分配在全局数据区,后者分配在栈区3) 生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在4) 使用方式不同:通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用4. 有N个大小不等的自然数(1–N),请将它们由小到大排序.要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
void sort(int e[], int n){int i;int t;for (i=1; i{t = e[e[i]];e[e[i]] = e[i];e[i] = t;}}5. 堆与栈的去区别A. 申请方式不同Stack由系统自动分配,而heap需要程序员自己申请,并指明大小。
B. 申请后系统的响应不同Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于所申请空间的堆结点,然后将该结点从空间结点链表中删除,并将该结点的空间分配给程序。
另外,大多数系统还会在这块内存空间中的首地址处记录本次分配的大小,以便于delete语句正确释放空间。
而且,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动将多余的那部分重新放入空闲链表。
C. 申请大小限制的不同Stack:在windows下,栈的大小是2M(也可能是1M它是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。
char str[]="hello";char *p1=str;int n=10;sizeof(str)=?sizeof(str)=?sizeof(str)=?void Func(char s[100]){sizeof(s)=?}void *p2=malloc(100);sizeof(p)=?/////////////////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h"#include <stdio.h>#include <iostream>using namespace std;void Func(char s[100]) ;int main(void){char str[]="hello";char *p1=str;char ch='k';int n=10;void *p2=malloc(100);printf("sizeof(str) %d/n",sizeof(str));printf("sizeof(&str) %d/n",sizeof(&str));printf("sizeof(p1) %d/n",sizeof(p1));printf("p1显示x %x/n",p1);printf("&p1显示x %x/n",&p1);printf("str显示x %x/n",str);printf("str显示s %s/n",str);printf("&str显示x %x/n",&str);printf("ch显示c %c/n",ch);printf("ch显示x %x/n",ch);printf("&ch显示x %x/n/n",&ch);printf("sizeof(&p1) %d/n",sizeof(&p1));printf("sizeof(n) %d/n",sizeof(n));printf("sizeof(&n) %d/n/n",sizeof(&n));printf("n的显示x %x/n",n);printf("&n的显示x %x/n",&n);printf("sizeof(p2) %x/n/n",sizeof(p2));Func(str);system("pause");return 0;}void Func(char s[100]){// s[100]="hike";printf("Func sizeof(s) %d/n",sizeof(s)); printf("Func sizeof(&s) %d/n",sizeof(&s)); }结果:sizeof(str) 6sizeof(&str) 6sizeof(p1) 4p1显示x 12ff78&p1显示x 12ff74str显示x 12ff78str显示s hello&str显示x 12ff78ch显示c kch显示x 6b&ch显示x 12ff70sizeof(&p1) 4sizeof(n) 4sizeof(&n) 4n的显示x a&n的显示x 12ff6csizeof(p2) 4Func sizeof(s) 4Func sizeof(&s) 4。