C专家编程

1、如果写了这样一条语句: if(3=i)。那么编程器会发出“attempted assignment to literal(试图向常数赋值)”的错误信息。

  所以将常量放置在==前央,可以避免写成赋值语句。

2、空格会对扩展的结果造成很大的影响。

  #define a(y) a_expanded(y)

  a(x)

  会被扩展为:a_expanded(x)
  而#define a (y) a_expanded (y)   a(x)   会被扩展为:   (y) a_expanded (y)(x)

3、函数声明中可以省略形参名,如:

  char *strcpy(char *, const char *);

  但不建议省略,国灰形参名起到了一个注释的作用。

  char *strcpy(char *dst,const char* src)。

4、以下代码是合法的。

  char *cp;

  const char *ccp;

  ccp = cp;

  cp指向一个char,ccp指向一个const char,两个指针指向类型相同,只是限定符不同。

  但以下代码是非法的。

  char **cp;

  const char **ccp;

  ccp = cp。

  因为上述中,cp是指向char*的指针,而ccp是指向const char *的指针。两个指针指向的类型不同。

5、在一个符号前加上const限定符只是表示这个符号不以被赋值。也就是它的值对于这个符号来说是只读的。

6、malloc(strlen(str))几乎可以断定它是错误的,而malloc(strlen(str)+1)才是正确的。因为字符串末尾有一个'\0'。

7、一串相邻的字符串,在编译时会被自动合并 。

  print("Hello"

  "World")。

8、缺省情况下,函数的名字是全局可见的。

   extern function pear() // 在任何地方均 可见

   static function turnip() // 在这个文件之外不可见

9、[]和()的优先级高于*。

  int *ap[] // ap是个元素为int指针的数组

  int *fp() // fp是个函数,返回int*

10、下述代码。当用户的输入超过了512个字符时,gets()函数会继续把多出来的字符压到堆栈中。

main(argc, argv)
{
char line[];
gets(line)
}

  应该用fgets替换gets。

  fgets(line, sizeof(line), stdin)

11、下述代码中,buffer是一个自动分配内存的数组,是该函数的局部变量。return之后,buffer的栈空间被回收,导致指针无效。

char * func()
{
char buffer[];
return buffer;
}

12、优化级。

  1)括号括起来的部分。

  2)后缀操作符,如()、[]。

  3)前缀操作符,如*。

13、chalk是一个指向int的指针,chese则是一个int。

  int *chalk,cheese;

C专家编程的更多相关文章

  1. C专家编程阅读笔记

    周末闲来无事,(哗),好久之前买的C专家编程一直没看,翻起来看了一下 尽量不使用unsigned 尽量不要在代码中使用unsigned,尤其是一些看起来是无符号类型的数字,比如年龄等,因为难免要使用u ...

  2. c专家编程摘录

    C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...

  3. <<c专家编程>>笔记

    C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...

  4. 《C专家编程》数组和指针并不同--多维数组

    <C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...

  5. C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载

    Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧, ...

  6. C专家编程cdecl

    理解所有分析过程的代码段 Page71(中文版) 你可以轻松地编写一个能够分析C语言的声明并把他们翻译成通俗语言的程序.事实上,为什么不?C语言声明的基本形式已经描述清楚.我们所需要的只是编写一段能够 ...

  7. c专家编程读书笔记

    无论在什么时候,如果遇到malloc(strlen(str));,几乎可以直接断定他是错误的,而malloc(strlen(str)+1):才是正确的: 一个L的NUL哟关于结束一个ACSII字符串: ...

  8. 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同

    数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...

  9. 《C专家编程》第三章——分析C语言的声明

    前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...

随机推荐

  1. winform 之公共控件

    Button 按钮 属性: (一).布局: 1.AutoSize:控件是否根据内容调整大小 2.Location:当前按钮位于界面位置 3.Dock:控件锁定到界面位置 -None:不锁定 4.Mar ...

  2. sqlserver数据库授权操作

    https://www.jb51.net/article/126432.htm 系统需求简介 最近一直在做高校云平台这个项目,我们小组做的是其中的一个子系统是成绩管理系统,不同于之前的开发方式,本次我 ...

  3. hive 测试

    hive> use gamedw;OKTime taken: 0.049 secondshive> select current_database();OKgamedwTime taken ...

  4. Redis 密码

  5. MySQL5.7 查询用户,配置IP限制

    1) MySQL 查询现在所有用户 select host,user from user; Navicat点击用户标签 查询;2) GRANT ALL PRIVILEGES ON *.* TO 'em ...

  6. c#与wpf的一些基础语法问题(摘用)

    1 .在vs里不同cs文件,位于同一个namespace,是什么情况. 答:http://msdn.microsoft.com/zh-cn/library/0d941h9d(v=vs.80).aspx ...

  7. MySQL查询优化(转)

    在分析性能欠佳的查询时,应考虑: 1) 应用程序是否正获取超过需要的数据,即访问了过多的行或列. 2) Mysql服务器是否分析了超过需要的行. 如果发现访问的数据行数很大,而生成的结果中数据行很少, ...

  8. String特殊值的判断方式

    对String的特殊值的判断上,除了要关注是否为null,还要关注是否是空字符串. 经常处理的时候直接判断是否为Null就好了,这样很容易出现问题: if(null!=str) { //not goo ...

  9. LeetCode OJ 15. 3Sum

    题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  10. C#格式化数值结果表(格式化字符串)

    字符 说明 示例 输出 C 货币 string.Format("{0:C3}", 2) $2.000 D 十进制 string.Format("{0:D3}", ...