Chinaunix首页 | 论坛 | 博客
  • 博客访问: 986637
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-09-12 10:20:34

这书看着挺好玩。 边角东西记录一下,以防忘记.
刚读了几十页,记录如下:
a. sizeof的操作数是变量时,括号可以省略,如果是类型名,就不能省略
sizeof *p 是合法的, sizeof int就是不合法的


b *操作符
书里38页用 “解除引用” 这个词来说明这个操作符, 我觉得挺贴切。比一般的 “指向的 ...”要好很多

c.优先级
*的优先级很低,所以读表达式的时候,最后读*。在声明中它应该和它的前缀类型放在一起看。
.   >  *  
[]  >  *
()  >  *
例子:
*p.f实际上是*(p.f)
int *ap[] 实际是数组元素为int*的数组
int *fp() 是返回int*的函数。

d. switch语句中default可以放在任何位置

e.计算次序。如果在表达式中直接调用函数,那么这些函数的调用顺序是不确定。
x = f() +g() * h()
f, g, h这三个函数调用的顺序不是一定的,所以一定不能有任何顺序关联。

f.参数的传递过程类似赋值。
根据ANSI C标准的赋值约束条件:
    1. 两个操作数都是指向有限定符或无限定符的相容类型的指针。
    2. 左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。

char *cp;
const char *cpp;
ccp = cp;
最后这个赋值是成立的 .
颠倒一下就不成立了 cp = ccp
因为ccp有限定符const, cp没有,右边有的限定符左边没有,编译就会报错。

类推到方法的参数传递,这段代码也有问题。 左边是char **argv,右边是const char **p,左边少了一个const,不成立
foo(const char **p) {}
main(int argc, char **argv){
        foo(arvg);
}

g. const本质意思是只读。读起来意思就是他后面解释出的东西是只读的.*是解除引用。从右往左读
const int *a;
int const* b;
int * const c;
const int * const e;
int const* const f;
a: const后面跟的是int。
所以*a是一个只读的int == a是一个指针,指向一个只读的int

b: const后面是*。*b是将b解除引用,得到是一个int.const就是修饰的这个接触引用后的int.
所以只读的*b是一个int == b是一个指针,指向一个只读的int

c: const后面是c. const修饰的是c,其类型是个地址(指向int的指针)。所以这个地址(指针)是只读的。
c是一个只读的int指针

e,f: 这是a,b中加了两个const.从右往左读。
e,f都是一个指针,前面加了const,说明e,f都是只读的指针。
const加在*的前面,把变量f解除引用,得到的是int值, 所以int也是只读的。
const加在int前,说明修饰的是int,所以int是只读。
ef表示一个只读的指针,起指向的int也是只读的。




阅读(988) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~