1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。2. *p+ 自增p 还是p 所指向的变量?答:后缀+ 和- 操作符本质上比前缀一目操作的优先级高, 因此*p+ 和*(p+) 等价, 它自增p 并返回p 自增之前所指向的值。要自增p 指向的值, 使用(*p)+, 如果副作用的顺序无关紧要也可以使用+*p。3 我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。为什么如下的代码(int *)p)+; 不行?答:在C 语言中, 类型转换意味着“把这些二进制位看作另一种类型, 并作相应的对待”; 这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值, 也不能用+ 自增。(如果编译器支持这样的扩展,那要么是一个错误, 要么是有意作出的非标准扩展。)