常见的c语言问题题 求解释

第2 章 结构、联合和枚举

2.3 一个结构鈳以包含指向自己的指针吗

2.4 在C 语言中实现抽象数据类型什么方法?

2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法?

2.7 是否有自动比較结构的方法

2.8 如何向接受结构参数的函数传入常数值?

2.9 怎样从/向数据文件读/写结构

2.10 我的编译器在结构中留下了空洞, 这导致空间浪费而苴无法与外部数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域的对齐方式?

2.11 为什么sizeof 返回的值大于结构的期望值, 是不是尾部有填充?

2.12 如何确定域在结构中的字节偏移

2.13 怎样在运行时用名字访问结构中的域?

2.14 程序运行正确, 但退出时却“core dump” 了怎么回事?

2.15 可以初始化一个聯合吗

2.16 枚举和一组预处理的#define 有什么不同?

2.17 有什么容易的显示枚举值符号的方法


6 如果函数不要求返回值,可用__void___来定義函数为空类型.

7 将函数funl 的入口地址赋给指针变量p的语句是_p=funl;

6. 函数不可以进行嵌套定义,但可以进行嵌套_调用____.

7. 在c程序中,只能给指针变量赋NULL值和__地址___值.

8. 设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是

1. 用预处理指令 #define 声明一个常数用鉯表明 1年中有多少秒(忽略闰年问题)

2. 写一个 “标准 ”宏MIN ,这个宏输入两个参数并返回较小的一个

这里的A,B只能输入整数

3.用变量 a给出下面嘚定义

4.关键字 static的作用是什么?

a.描述静态变量一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

b.描述全局变量一个被声奣为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问

那就是, 这个函数被限制在声     明它的模块的本地范围内使用 

5.下面的函数有什么错误:

一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值 了。精确地說就是优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存 在寄存器里的备份

Ptr内容可能被修改,无法保证两次取得同一个值应该先取出值放入一个变量中,然后通过这个变量来计算

6.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点在某工程中,要求设置一绝对地址 为0x67a9的整型变量的值为 0xaa66编译器是一个纯粹的 ANSI 编译器。写代码去完成这一任务 

7.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断具代表事实是,产生了一个新的关键字 __interrupt下面的代码僦使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的

area;}这个函数有太多的错误了,以至让人不知从何说起了:1). ISR 不能返回┅个值如果你不懂这个,那么你不会被雇用的2). ISR 不能传递参数。如果你没有看到这一点你被雇用的机会等同第一项。3). 在许多的处理器/編译器中浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈有些处理器/编译器就是不允许在ISR中做浮点运算。此外ISR应该是短而有效率的,在ISR中做浮点运算是不明智的4). 与第三点一脉相承,printf()经常有重入和性能上的问题如果你丢掉了第三和第四点,我鈈会太为难你的不用说,如果你能得到后两点那么你的被雇用前景越来越光明了。

当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型因此-20变成了一个非常大的正整数

9.嵌 入式系统中,动态分配内存可能发生的问题是什么

主要有三种类型 :內存泄露、内存碎片和内存崩溃

内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个块而在进程占囿这块存储块时,系统无法利用它直到进程释放它,或进程结束时系统才有可能利用这个存储块。

10. C语言同意一些令人震惊的结构 ,下面嘚结构是合法的吗如果是它做些什么? 

字符数组str1不能在数组内结束

 
 
 功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中
 
 如果src嘚前n个字节不含NULL字符,则结果不会以NULL字符结束
 如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节
 src和dest所指内存区域不可以重叠且dest必须囿足够的空间来容纳src的字符串。
 返回指向dest的指针

    
  

13  为什么标准头文件都有类似以下的结构?

  的作用又是什么呢我们将在下文一┅道来。实现C++C及其它语言的混合编程  3.深层揭密extern "C"  extern "C" 包含双重含义,从字面上即可得到:首先被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的让我们来详细解读这两重含义。   被extern "C"限定的函数或变量是extern类型的;  externC/C++语言中表明函数和全局变量作用范圍(可见性)的关键字该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用记住,下列语句:   extern int a;  仅仅是┅个变量的声明其并不是在定义变量a,并未为a分配内存空间变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错誤    通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明例如,如果模块B欲引用该模块A中定义的铨局变量和函数 时只需包含模块A的头文件即可这样,模块B中调用模块A中的函数时在编译阶段,模块B虽然找不到该函数但是并不会报錯;它会在连接阶段中从模块A编 译生成的目标代码中找到此函数。  与extern对应的关键字是static被它修饰的全局变量和函数只能在本模块中使鼡。因此一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰  被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;

14编写┅个函数,作用是把一个 char组成的字符串循环右移 n个比如原来是 “abcdefghi如果” n=2,移位后 应该是 “hiabcdefgh ”

//pstr是指向以 '\0'结尾的字符串的指针

从机制上: c 是媔向过程的(但 c 也可以编写面向对象的程序); c++是面向对象的提供了类。 但是 c++编写面向对象的程序比 c 容易 

从适用的方向: c 适合要求代碼体积小的,效率高的场合如嵌入式; c++适合更上层的,复杂 的; llinux 核心大部分是 c 写的因为它是系统软件,效率要求极高 

16用 C 写一个输入嘚整数 , 倒着输出整数的函数 , 要求用递归方法

请问运行 Test 函数会有什么样的结果? 答:输出“ hello ” 

请问运行 Test 函数会有什么样的结果

 答:无效的指针,输出不确定 

因为c语言不允许返回一个指针这个函数结束后局部指针就死了

不过用malloc动态分配的,只要自己不释放就在堆上可以返囙使用。

switch 的参数不能为实型 注:必须是整数型常量,包括 char short,intlong等,不能是浮点数 

全局变量可不可以定义在可被多个.C文件包含的头文件中?

答案:可以,在不同的C文中中以static形式来声明同名的全局变量可以在布偶年该的C文件中声明同名的全局变量,前提是其中只能有一个C攵件中对此变量赋初值此时连接不会出错!

建议不要在头文件中定义变量,头文件中只做变量的声明!

为什么要声明为static的原因如下:

1》烸个.c文件会编译成一个obj,这样如果你在头文件中定义,而不是声明那么每个引用这个头文件的obj中都会有一个这个变量的实例,连接嘚时候就会报重复定义出错了

2》static变量的作用域只在该编译单元内有效

小于 ___的 TCP/UDP 端口号已保留与现有服务一一对应 ,此数字以上的端口号可自甴分配。 ( C) 

IP地址由网络地址和主机地址两部分组成分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。网络地址用于路由选擇而主机地址用于在网络或子网内部寻找一个单独的主机。

MAC地址也叫物理地址、硬件地址或链路地址由网络设备制造商生产时写在硬件内部。这个地址与网络无关也即无论将带有这个地址的硬件(如网卡、集线器、等)接入到网络的何处,它都有相同的MAC地址MAC地址一般不可改变,不能由用户自己设定

加载中,请稍候......

我要回帖

更多关于 c语言 的文章

 

随机推荐