4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边
这样的代码吗? ((condition) ? a : b) = complicated_expression;
不能。M(操作符跟多数操作符一样生成一个值而不能被赋值。换言之M( 不能生成一个 >>左值)。
如果你真的需要你可以试试下面这样的代码(:..0M3(30/
D+-尽管这毫无优雅可言。
5.2*p++ 自增 p 还是 p 所指向的变量?
后缀 和 操作符本质上比前缀一目操作的优先级高=因此 L和 L67等价=它自增 并返回 自增
之前所指向的值。要自增 指向的值=使用 6L7=如果副作用的顺序无关紧要也可以使用 L。
5.3 我有一个 char * 型指针正巧指向一些 int 型变量, 我想跳过它们。为什么如
下的代码 ((int *)p)++; 不行?
在 语言中 类型转换意味着 >>把这些二进制位看作另一种类型并作相应的对待)-这是一个转换操作符,
根据定义它只能生成一个右值 (rvalue)。而右值既不能赋值, 也不能用 ++ 自增。.如果编译器支持这样的扩
展那要么是一个错误要么是有意作出的非标准扩展。0要达到你的目的可以用(/.:0..
:0N0-或者 因为 是 :型 直接用 N/*.0-
但是=在可能的情况下=你还是应该首先选择适当的指针类型=而不是一味地试图李代桃僵。
5.4 我有个函数,它应该接受并初始化一个指针 void f(int *ip) { static int
dummy = 5; ip = &dummy;} 但是当我如下调用时: int *ip; f(ip); 调用
者的指针却没有任何变化。
你确定函数初始化的是你希望它初始化的东西吗?请记住在 中=参数是通过值传递的。被调函数仅仅修改了传
入的指针副本。你需要传入指针的地址 6函数变成接受指针的指针7=或者让函数返回指针。
什么是空指针?
2212!%!<2 检举