语言经典问答摘录.pdfVIP

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

文档评论(0)

1亿VIP精品文档

相关文档