你必须知道的495个C语言问题

VIP免费
2025-02-27 0 0 1.35MB 153 页 5.9玖币
侵权投诉
C语言常见问题集
原著:Steve Summit
翻译:朱群英,孙 云
修订版 0.9.4, 2005 623
版权所有 c
°2005
目录
目录 i
前言 xvii
1声明和初始化 1
1.1 我如何决定使用那种整数类型? ................... 1
1.2 64 位机上的 64 位类型是什么样的? ................ 1
1.3 怎样定义和声明全局变量和函数最好? ............... 2
1.4 extern 在函数声明中是什么意思? ................. 2
1.5 关键字 auto 到底有什么用途? ................... 2
1.6 typedef struct {char
*item; NODEPTR next; }*NODEPTR; 但是编译器报了错误信
息。难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3
1.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N个指向返
回指向字符的指针的函数的指针的数组? .............. 3
1.8 函数只定义了一次,调用了一次,但编译器提示非法重定义了。 . . 4
1.9 main() 的正确定义是什么? void main() 正确吗? ......... 4
1.10 对于没有初始化的变量的初始值可以作怎样的假定?如果一个全
局变量初始值为 ”, 它可否作为空指针或浮点零? ....... 4
1.11 代码 int f() {char a[] = "Hello, world!";}不能编译。 ....... 5
1.12 这样的初始化有什么问题?char *p = malloc(10); 编译器提示
法初始式云云。 ........................... 5
1.13 以下的初始化有什么区别?char a[] = "string literal"; char *p =
"string literal";当我向 p[i] 赋值的时候,我的程序崩溃了。 . . . . 5
1.14 我总算弄清除函数指针的声明方法了,但怎样才能初始化呢? . . 5
2结构、联合和枚举 7
2.1 声明 struct x1 {...};typedef struct {...}x2; 有什么不同? . 7
2.2 为什么 struct x {...}; x thestruct; 不对? ............. 7
2.3 一个结构可以包含指向自己的指针吗? ............... 7
2.4 C语言中实现抽象数据类型什么方法最好?........... 7
2.5 C中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7
i
目录 ii
2.6 : struct name {int namelen; char
namestr[1];};然后又使用一些内存分配技巧使 namestr
来好像有多个元素。这样合法和可移植吗? ............ 8
2.7 是否有自动比较结构的方法? .................... 8
2.8 如何向接受结构参数的函数传入常数值? .............. 8
2.9 怎样从/向数据文件读/写结构? ................... 9
2.10 我的编译器在结构中留下了空洞,这导致空间浪费而且无法与外
部数据文件进行 二进制读写。能否关掉填充,或者控制结构域
的对齐方式?.............................. 9
2.11 为什么 sizeof 返回的值大于结构的期望值,是不是尾部有填充?. . 9
2.12 如何确定域在结构中的字节偏移? ................. 9
2.13 怎样在运行时用名字访问结构中的域? ............... 10
2.14 程序运行正确,但退出时却 “core dump”了,怎么回事? . . . . . 10
2.15 可以初始化一个联合吗? ....................... 10
2.16 枚举和一组预处理的 #define 有什么不同? ............ 10
2.17 有什么容易的显示枚举值符号的方法? ............... 11
3表达式 13
3.1 为什么这样的代码: a[i] = i++; 不能工作? ............ 13
3.2 使用我的编译器,下面的代码 int i=7; printf("%d\n", i++ * i++);
返回 49?不管按什么顺序计算,难道不该打印出56吗? ...... 13
3.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果,有的为
3, 有的为 4, 哪个是正确的? ..................... 14
3.4 这是个巧妙的表达式: aˆ=bˆ=aˆ=b它不需要临时变量就可
以交换 ab的值。 ......................... 14
3.5 我可否用括号来强制执行我所需要的计算顺序? .......... 14
3.6 可是 && || 运算符呢?我看到过类似 while((c = getchar()) !=
EOF && c != \n)的代码 …… .................. 14
3.7 我怎样才能理解复杂表达式?序列点是什么? ......... 15
3.8 那么,对于 a[i] = i++; 我们不知道 a[] 的哪一个分量会被改写,i
的确会增加 1, 对吗? ......................... 15
3.9 ++i i++ 有什么区别? ...................... 15
3.10 如果我不使用表达式的值,我应该用 ++i i++ 来自增一个变量
吗? .................................. 15
3.11 为什么如下的代码 int a = 100, b = 100; long int c = a * b; 不能
工作? ................................. 15
3.12
个。这样((condition) ? a : b) = compli-
cated expression; ........................... 16
目录 iii
4指针 17
4.1 我想声明一个指针并为它分配一些空间,但却不行。这些代码有
什么问题?char *p; *p = malloc(10); ................ 17
4.2 *p++ 自增 p还是 p所指向的变量? ................ 17
4.3 我有一个 char * 型指针正巧指向一些 int 型变量,我想跳过它们。
为什么如下的代码((int *)p)++; 不行? .............. 17
4.4 我有个函数,应该接受并初始化一个指针 void f(int *ip) {static
int dummy = 5; ip = &dummy;}但是当我如下调用时: int *ip;
f(ip); 调用者的指针却没有任何变化。 ............... 18
4.5 我能否用 void** 指针作为参数,使函数按引用接受一般指针? . . 18
4.6 我有一个函数 extern int f(int *); 它接受指向 int 型的指针。我怎
样用引用方式传入一个常数?下面这样的调用 f(&5); 似乎不行。 . 18
4.7 C 按引用传递吗? ....................... 18
4.8 我看到了用指针调用函数的不同语法形式。到底怎么回事? . . . 19
4.9 我怎样把一个 int 变量转换为 char * 型?我试了类型转换,但是不
行。 .................................. 19
5(null) 指针 21
5.1 臭名昭著的空指针到底是什么? ................... 21
5.2 怎样在程序里获得一个空指针? ................... 21
5.3 用缩写的指针比较 “if(p)” 检查空指针是否可靠?如果空指针的内
部表达不是 0会怎么样? ....................... 22
5.4 NULL 是什么,它是怎么定义的? .................. 23
5.5 使非全, NULL 是如
的? .................................. 23
5.6 如果 NULL 定义成 #define NULL ((char *)0) 难道不就可以向函
数传入不加转换的 NULL 了吗? .................. 23
5.7 如果 NULL 0,那我到底该用哪一个
呢? .................................. 24
5.8 是如NULL ,使
,难道用 NULL (而不是 0) 不是更好吗? ............. 24
5.9 用预定义宏 #define Nullptr(type) (type *)0 帮助创建正确类型的
空指针。 ................................ 24
5.10 这有点奇怪。NULL 可以确保是 0, 但空 (null) 指针却不一定? . . 24
5.11 为什么有那么多关于空指针的疑惑?为什么这些问题如此经常地
出现? ................................. 25
5.12 我很困惑。我就是不能理解这些空指针一类的东西。 ....... 25
5.13 考虑到有关空指针的所有这些困惑,难道把要求它们内部表达都
必须为 0不是更简单吗? ....................... 26
5.14 说真的,真有机器用非零空指针吗,或者不同类型用不同的表达? 26
摘要:

CÔýÈnÙ5"ð÷SteveSummitJrë •‡,ä©èñ0.9.4,2005 M623 °ñ ƒîµc°2005"c "ci -ýxvii12ü„SÄ11.1á Â…%çP¨ *Õœ”˘$...................11.264Ê¥64Ê˘^I¹"¥$................11.38"çl„2ü †M„f”Kz$...............21.4externf”2üÏ^I¹i±$.................21.51...

展开>> 收起<<
你必须知道的495个C语言问题.pdf

共153页,预览5页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:153 页 大小:1.35MB 格式:PDF 时间:2025-02-27

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 153
客服
关注