阅读:3041回复:27
问几个C/C++的基础,我一直不清楚
1 局部变量 全局变量 局部静态变量 全局静态变量的区别
2 void foo() const;此处const怎么说? 3 stdcall关键字什么意思? 4 什么是条件变量? 5 在堆上分配内存是malloc,相对应的栈上分配是什么函数? 6 C++中的虚拟继承是什么意思 其他想不起来了,好难啊!觉得,请教大家。 我以前一直偏应用了,这些都忘记了! 谢谢 |
|
最新喜欢:hanwl |
沙发#
发布于:2004-12-18 14:22
真够基础的了,
还是找一本书看看吧 电子版的网上到处都是 |
|
|
板凳#
发布于:2004-12-18 15:43
这些东西看了就忘!还是找本书看看吧!
|
|
地板#
发布于:2004-12-18 17:47
有点难度!
|
|
地下室#
发布于:2004-12-18 20:41
1 从字面上理解就差不多了;
2 const是常量,不能被改变的; 3 stdcall 是一种函数调用机制,涉及到参数进栈的次序问题; 4 条件表达式表示的变量吧; 5 不清楚; 6 这个比较难说,涉及到动态连编问题 我也是菜鸟,仅供参考! |
|
|
5楼#
发布于:2004-12-18 21:40
哎,我也觉得不需要知道。
可是这是面试题目啊! 丢人啊 |
|
6楼#
发布于:2004-12-18 23:24
1 局部变量 全局变量 局部静态变量 全局静态变量的区别 1、从作用域来说,局部变量只在“局部”可见,如{}内,或某个函数内,一般在stack,临时的,而static的局部变量,则一直存在(第一次“遇见”的时候才初始化),不过范围是“局部”的;全局的则“全局”范围都可见,static的“全局”则只在声明的文件范围有效。(千万不要再问什么是“局部”和“全局”了。呵呵) 2、此const若修饰成员函数,指不会修改成员变量,修饰非成员函数的。。。没有 3、stdcall为函数调用方式之一,具体可以看MSDN,和cdecl差不多右边参数先入栈,但被调用者恢复stack(cdecl是调用者恢复) 4、??,是说Linux下的吗? 5、stack上好像不要,上次见讨论,可惜没有记下。。。 :P 6、翻C++ Pragramming Language吧 |
|
7楼#
发布于:2004-12-19 18:31
谢谢。清楚多了!
他说条件变量是用于互斥的!和信号量作用一样! |
|
8楼#
发布于:2004-12-25 12:54
哎,我也觉得不需要知道。 去哪面试呀?考这种变态的题目 |
|
|
9楼#
发布于:2004-12-26 15:05
我只能回答部分问题:
1 局部变量 全局变量 局部静态变量 全局静态变量的区别 在函数内部(括在两个{}号之间)定义的变量称为局部变量,其只能在函数内部可见,不能在函数外部访问。 全局变量定义在所有函数的外部,其可见范围从定义处开始一直到定义它的模块结尾处,在这其间定义的所有函数都可以访问它,也可以通过声明(使用Extern关键字)的方法在定义之前或别的模块中访问它。 局部静态变量也属局部变量,所不同的是:其生存期为整个程序运行周期,其实质上与全局变量存放在内存的同一位置:数据段中,而普通的局部变量是临时分配内存的,在栈上存放,只有在函数代码被调用时才为其分配内存,函数调用结束后,局部变量就无效了,另外,早期的C编译器如Turbo C2.0不允许在定义局部变量时对其进行初始化,但可以对局部静态变量进行初始化且只能初始化一次!现在的编译器大多允许按对静态变量相同的方式对普通局部变量进行初始化,但其实际上是编译器自动的为所定义的局部变量增加了几条赋值指令(可以通过查看其对应汇编代码来看到这一过程),因此其严格来说也是不能被初始化的,其与全局变量和静态变量的初始化完全是两回事,并且由于本质上是赋值,因此每次调用函数都要对局部变量进行所谓的初始化而局部静态变量就只能执行一次初始化! 全局静态变量只是编译器提供的一种工具,它与普通全局变量的区别是:它只能在定义它的模块内部被访问!不能对一个已定义为static的全局变量使用Extern关键字将其在定义域外部被访问,除此之外与普通全局变量没什么区别。 2 void foo() const;此处const怎么说? 这种函数声明方法在声明函数体时与下面这种写法相同: void const foo(); 表示函数返回一个常量,常量的类型为void型,但这其实意味着函数不能返回值!因此,尽管语法没错但几乎完全没有这么用的道理! 但当函数返回一个void型的常量指针时(或者是其他类型的常量指针)比如如下的声明: void * foo() const; 它表示:函数返回一个void型的常量指针,这意味着所返回的指针本身不能被修改,但指针指向的内存单元是可以被修改的,而如下的声明: void const *foo(); 则表示函数返回一个指向void型常量的指针,这意味着指针本身可以被修改以指向别的内存单元但不能修改任意时刻指针指向的内存单元的内容! 3 stdcall关键字什么意思? 这是VC的函数类型关键字,确切的说它指明了函数调用的方式,它取代了早期的PASCAL调用关键字,PASCAL关键字指示编译器对函数参数的入栈顺序为从左到右,而默认方式下函数参数的入栈顺序为从右到左,stdcall调用也起类似的作用,它使所有用stdcall声明的函数之间可以安全的互相调用,但它也可能还有其他的功能。 4 什么是条件变量? 这个听说过但忘记其具体含义了,不好意思。 5 在堆上分配内存是malloc,相对应的栈上分配是什么函数? 奇怪呀?据我所知栈上的空间是不能随意分配的,栈通常都是由操作系统管理的,因此好象没有哪个函数是可以直接从栈上分配空间的,我指的是在程序运行过程中动态的从栈上分配空间,如果是静态分配的话所有在函数中定义的局部变量的空间都是从栈上分配的。 6 C++中的虚拟继承是什么意思 这个直接找C++的书看就有现成的答案,而且说得也已经不能再详细了,不过我现在有点记不太清楚,呵呵。 |
|
10楼#
发布于:2004-12-26 21:52
一个比一个专业
|
|
11楼#
发布于:2004-12-27 10:23
跟9楼学了很多东西
|
|
12楼#
发布于:2004-12-28 11:47
3 stdcall关键字什么意思?
是一种调用规则,从右向左压栈,参数全部压到栈里不用寄存器。由被调函数处理堆栈平衡。 这个好像和VC没有什么特别的关系,C++用的是thiscall,是把this放在ecx里,stdcall没有寄存器传参。 |
|
13楼#
发布于:2005-01-02 21:44
9楼和6楼
厉害 |
|
14楼#
发布于:2005-01-03 00:49
根据作用域的不同,可以把变量分为三种类型:局部变量、全局变量和形参。作用域规则首先就是用来控制程序对这些变量的访问和建立变量的生命期。
局部变量只能在说明他的代码块内使用,局部变量的作用域:从说明的地方开始至所在的代码块结束。 局部变量在执行说明他们的代码块时,才是存在的。当执行退出其代码块时,这些变量也就随之消失,成为不可见。 因而,在代码块外不能访问这些局部变量. 写了这么多才回答了什么是局部变量,以后有空再答其他的问题。 |
|
15楼#
发布于:2005-01-03 21:12
2 void foo() const;此处const怎么说?
"这种函数声明方法在声明函数体时与下面这种写法相同: void const foo(); 表示函数返回一个常量,常量的类型为void型,但这其实意味着函数不能返回值!因此,尽管语法没错但几乎完全没有这么用的道理! 但当函数返回一个void型的常量指针时(或者是其他类型的常量指针)比如如下的声明: void * foo() const; 它表示:函数返回一个void型的常量指针,这意味着所返回的指针本身不能被修改,但指针指向的内存单元是可以被修改的,而如下的声明: void const *foo(); 则表示函数返回一个指向void型常量的指针,这意味着指针本身可以被修改以指向别的内存单元但不能修改任意时刻指针指向的内存单元的内容! " 这个说发是错的!const在后面的意思是在这个函数中,类成员变量不能修改是只读的! |
|
16楼#
发布于:2005-01-04 09:16
我发现在64位WINDOWS下所有函数调用都用FASTCALL了,大家注意没有???
|
|
|
17楼#
发布于:2005-01-04 09:20
而且新增了R8-R15, 8个通用寄存器,基本上都可以不用使用堆栈来传递参数了,爽啊............
|
|
|
18楼#
发布于:2005-01-07 09:24
哎,我还没有摸过64位的东西。
觉得奇怪,为什么有fastcall还会有stdcall。cdecl便于跟踪时的堆栈操作,thiscall很方便不用算this,但stdcall是干什么用的,还用的那么多。 |
|
19楼#
发布于:2005-01-09 17:15
呵呵,好
|
|
|
上一页
下一页